超出Color.FromArgb(Int32,Int32,Int32)的范围

时间:2014-01-12 13:15:19

标签: c# colors bitmap rgb picturebox

我用c#语言运行此代码,但是有错误

“257的值”对red.red无效应大于或等于0且小于或等于255“

如何更正此错误?

Int32[,] Y1= new Int32[width,height];//R,G,B not empty array       
Int32[,] R= new Int32[width,height];       
Int32[,] G= new Int32[width,height];      
Int32[,] B= new Int32[width,height];        
Bitmap bmp=new Bitmap[width,height];
for (int y = 0; y < height; y++)
for (int x = 0; x < width; x++)
{

   Y1[x, y] = Convert.ToInt32(0.39 * R[x, y] + 0.59 * G[x, y] + 0.12 * B[x, y]);                                
   bmp.SetPixel(x, y, Color.FromArgb(Y1[x,y],Y1[x,y],Y1[x,y]));
}
pictureBox1.Image = bmp;

我知道“Color.FromArgb(Y1 [x,y],Y1 [x,y],Y1 [x,y])”超出范围但我怎么能

纠正吗?

1 个答案:

答案 0 :(得分:3)

您可能正在尝试转换为灰度。你应该做两件事:

  1. 你的体重是错误的。正确的重量是0.299,0.587和0.114。
  2. 使用Math.Min()应用上限。类似的东西:

    Y1 [x,y] = Math.Min(255,Convert.ToInt32(0.299 * R [x,y] + 0.587 * G [x,y] + 0.114 * B [x,y])); < / p>

  3. 上限只是为了确保我们的公式永远不会超过最大字节值。