使用 ToArgb() 后跟 FromArgb() 不会产生原始颜色

发布于 2024-07-16 08:47:12 字数 496 浏览 9 评论 0原文

这不起作用 有

        int blueInt = Color.Blue.ToArgb();
        Color fred = Color.FromArgb(blueInt);
        Assert.AreEqual(Color.Blue,fred);

什么建议吗?

[编辑]

我正在使用 NUnit 并且输出失败

预期:颜色 [蓝色]

但是是:颜色 [A=255,R=0,G=0,B=255]

[编辑]

这有效!

        int blueInt = Color.Blue.ToArgb();
        Color fred = Color.FromArgb(blueInt);
        Assert.AreEqual(Color.Blue.ToArgb(),fred.ToArgb());

This does not work

        int blueInt = Color.Blue.ToArgb();
        Color fred = Color.FromArgb(blueInt);
        Assert.AreEqual(Color.Blue,fred);

Any suggestions?

[Edit]

I'm using NUnit and the output is

failed:

Expected: Color [Blue]

But was: Color [A=255, R=0, G=0, B=255]

[Edit]

This works!

        int blueInt = Color.Blue.ToArgb();
        Color fred = Color.FromArgb(blueInt);
        Assert.AreEqual(Color.Blue.ToArgb(),fred.ToArgb());

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

留蓝 2024-07-23 08:47:12

来自 关于 Color.operator = 的 MSDN 文档=

此方法比
颜色结构的 ARGB 值。
它还对一些内容进行了比较
国家旗帜。 如果你想比较
只是两个 Color 的 ARGB 值
结构,使用比较它们
ToArgb 方法。

我猜州旗是不同的。

From the MSDN documentation on Color.operator ==:

This method compares more than the
ARGB values of the Color structures.
It also does a comparison of some
state flags. If you want to compare
just the ARGB values of two Color
structures, compare them using the
ToArgb method.

I'm guessing the state flags are different.

冷心人i 2024-07-23 08:47:12

它们不会相同,因为 Color.Blue 不等于您的颜色对象,它等于内部存储的内容,即“new Color(KnownColor.Blue);” 准确地说。

They won't equal the same, as Color.Blue doesn't equal your colour object, it equals something stored internally, a "new Color(KnownColor.Blue);" to be exact.

染年凉城似染瑾 2024-07-23 08:47:12

由于值类型的装箱,我预计 Assert.AreSame 会出现这种情况,但 AreEqual 不应该有这个问题。

您能否添加您使用的语言(我假设是 C#)以及测试框架?

Assert.AreEqual(true, Color.Blue == fred); 会产生什么结果?

I would have expected this with Assert.AreSame because of the boxing with the value types, but AreEqual should not have this problem.

Could you add which language (I'm assuming C#) your using and which testing framework?

What does Assert.AreEqual(true, Color.Blue == fred); result in?

拥抱影子 2024-07-23 08:47:12

或者,这也可行,而且我认为它更直观

    [Test]
    public void ColorTransform()
    {
        var argbInt = Color.LightCyan.ToArgb();
        Color backColor = Color.FromArgb(argbInt);
        Assert.AreEqual(Color.LightCyan.A, backColor.A);
        Assert.AreEqual(Color.LightCyan.B, backColor.B);
        Assert.AreEqual(Color.LightCyan.G, backColor.G);
        Assert.AreEqual(Color.LightCyan.R, backColor.R);
    }

Alternatively, this also works, and I think it's more intuitive

    [Test]
    public void ColorTransform()
    {
        var argbInt = Color.LightCyan.ToArgb();
        Color backColor = Color.FromArgb(argbInt);
        Assert.AreEqual(Color.LightCyan.A, backColor.A);
        Assert.AreEqual(Color.LightCyan.B, backColor.B);
        Assert.AreEqual(Color.LightCyan.G, backColor.G);
        Assert.AreEqual(Color.LightCyan.R, backColor.R);
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文