2011-01-13 88 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

附:如果有更詳細的問題,會有很多回答

相關問題