我一直在尝试创建一个灰度位图,它的像素由我自己的颜色数组填充。这个二维数组来自获取和操作彩色图像的每个像素的过程。换句话说,我正在尝试准备一种将彩色转换为灰度的方法。
这是我如何得到像素值并计算平均值
for (var i = 0; i < SharedImg.ImgBitmap.Width;i++)
{
for (var j = 0; j < SharedImg.ImgBitmap.Height; j++)
{
var pix= SharedImg.ImgBitmap.GetPixel(i, j);
var red = (int) pix.R;
var green = (int) pix.G;
var blue = (int) pix.B;
var avrg = (red + green + blue)/3;
var rgb = Color.FromArgb(avrg, avrg, avrg);
arrColors[i, j] = rgb;
}
}
现在它用数组
填充新的位图 var imgBitmap=new Bitmap(width,height,PixelFormat.Format16bppGrayScale);
for(var i=0 ; i<width;i++)
for (var j = 0; j < height; j++)
{
try
{
imgBitmap.SetPixel(i, j, arrColors[i, j]);
}
catch (Exception exception)
{
mainForm.UpdateNewLine(new SystemResponse(){Color = Color.Red,State = exception.ToString()});
}
}
当它到达SetPixel
方法时,它会抛出ArgumentException
。
任何想法或提示?