我有代表
private delegate Color ColorDel(int x, int y);
返回一个点的颜色,与Bitmap.GetPixel(x,y)
即使我直接将颜色放入位图中,作为Color.Red
,
返回颜色与所有ARGB相同,但与名称不同,ffff0000
而不是Color.Red
实际上是红色。
ToKnownColor
也不会做到这一点。
有关此事的任何意见?
编辑,代码:
class ColorDelegateTest
{
private delegate Color ColorDel(int x, int y);
private static bool FoundColor(int x, int y, Color color, ColorDel dlgt)
{
var theColor = dlgt.Invoke(x, y);
//theColor = "{Name=ffff0000, ARGB=(255, 255, 0, 0)}"
//Color.Red = "{Name=Red, ARGB=(255, 255, 0, 0)}"
var r = dlgt.Invoke(x, y) == color; //False
var t = dlgt.Invoke(x, y) == Color.FromArgb(255, 255, 0, 0); //True
var f = dlgt.Invoke(x, y) == Color.Red; //False
if (r || t || f)
return true;
return false;
}
private static void ItterateColors()
{
int xMax = 300;
int yMax = 300;
Bitmap bmp = new Bitmap(xMax, yMax);
ColorDel colorDelegate = new ColorDel(bmp.GetPixel);
for (int x = 0; x < xMax; x++)
for (int y = 0; y < yMax; y++)
{
bmp.SetPixel(x, y, Color.Red);
FoundColor(x, y, Color.Red, colorDelegate);
}
}
}
埃里克
答案 0 :(得分:5)
Color.Red
包含一个表示它是已知颜色的位,而Color.FromArgb(255, 0, 0)
不是这样,它们不会相等。进行比较的一种方法是与.ToArgb()
进行比较:
dlgt.Invoke(x, y).ToArgb() == Color.Red.ToArgb()
答案 1 :(得分:1)
尝试使用Color.FromName(“Red”)代替Color.Red
P.S。如果有更详细的问题,本来会有很多答案