2011-01-13 90 views
1

我有一个委托代表返回正确的颜色,但仍然是错误

private delegate Color ColorDel(int x, int y); 

其在某点返回一个颜色,用Bitmap.GetPixel(x,y)

即使我把颜色换成位图直接之前使用,作为Color.Red, 返回的颜色与所有ARGB相同,但不在名称上,即ffff0000而不是红色,因为实际上是Color.RedToKnownColor也没有办法。

关于此事的任何意见?

编辑,代码:

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); 
       } 
     } 
    } 

埃里克

+1

如果你能后的实际代码(不只是委托声明),这将使它更容易帮助你。 – 2011-01-13 14:04:06

+1

顺便说一句,这已经得到**没有**与使用委托做。您可以通过直接尝试使用`GetPixel`轻松地进行测试。 – 2011-01-13 14:30:04

回答

5

Color.Red包含一个位表示它是已知颜色,而Color.FromArgb(255, 0, 0)不会,因此它们不会相等。做比较的方法之一是只是.ToArgb()比较:

dlgt.Invoke(x, y).ToArgb() == Color.Red.ToArgb() 
1

尝试使用Color.FromName( “红楼梦”),而不是Color.Red

附:如果有更详细的问题,会有很多回答

相关问题