2009-04-06 20 views
5

này không hoạt độngSử dụng ToArgb() tiếp theo là FromArgb() không dẫn đến việc màu sắc ban đầu

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

Bất kỳ lời đề nghị?

[Chỉnh sửa]

Tôi đang sử dụng NUnit và đầu ra là

thất bại:

dự kiến: Màu [Blue]

Nhưng là: Màu sắc [A = 255, R = 0, G = 0, B = 255]

[Chỉnh sửa]

Công trình này!

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

sử dụng màu = System.Drawing.Color; –

+0

P.S. nhận xét trên chỉ là hài hước về màu sắc, không phải là một nỗ lực tại một câu trả lời. –

Trả lời

10

Từ MSDN documentation on Color.operator ==:

Phương pháp này so sánh hơn các giá trị ARGB của các cấu trúc Màu. Nó cũng so sánh một số cờ trạng thái . Nếu bạn muốn so sánh chỉ giá trị ARGB của hai cấu trúc màu , hãy so sánh chúng bằng phương pháp ToArgb.

Tôi đoán cờ trạng thái là khác nhau.

+3

@lc: Các cờ trạng thái khác nhau vì thuộc tính tĩnh màu xanh trả về một màu có tên, trong khi ToArgb không giữ lại thực tế là màu được đặt tên, int chỉ giữ lại thông tin ARGB. Khi chuyển đổi trở lại một màu, tên bị mất, do đó lý do tại sao bằng nhau không trả về true. – casperOne

+0

@casperOne: Cảm ơn bạn đã giải thích thêm. Tôi nghĩ nó phải liên quan đến cái tên, nhưng thành thật mà nói, tôi không chắc chắn lắm. Điều này xóa nó lên. –

+0

Nhờ cả hai bạn. –

0

Tôi đã mong đợi điều này với Assert.AreSame vì quyền lợi với các loại giá trị, nhưng AreEqual không nên có vấn đề này.

Bạn có thể thêm ngôn ngữ nào (tôi giả sử C#) bạn đang sử dụng và khung thử nghiệm nào không?

Kết quả là Assert.AreEqual(true, Color.Blue == fred); là gì?

+0

Có - đó là C# Sử dụng NUnit và đầu ra là: không thành công: Dự kiến: Màu [Xanh] Nhưng là: Màu [A = 255, R = 0, G = 0, B = 255] –

1

Chúng sẽ không bằng nhau, vì Color.Blue không bằng đối tượng màu của bạn, nó bằng một thứ gì đó được lưu trữ bên trong, một "Màu mới (KnownColor.Blue);" chinh xac.

0

Ngoài ra, điều này cũng làm việc, và tôi nghĩ rằng đó là trực quan hơn

[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); 
    } 
Các vấn đề liên quan