C#实现把彩色图片灰度化代码分享
彩色图片转为灰度图的公式如下:
gray(i,j)=0.299*Red(i,j)+0.587*Green(i,j)+0.114*Blue(i,j)
其中gray(i,j)为转化后的灰度值 (i,j)为像素点的位置。
源代码如下:
publicstaticBitmapChangeGray(Bitmapb)
{
BitmapDatabmData=b.LockBits(newRectangle(0,0,b.Width,b.Height),ImageLockMode.ReadWrite,
PixelFormat.Format24bppRgb);
intstride=bmData.Stride;//扫描的宽度
unsafe
{
byte*p=(byte*)bmData.Scan0.ToPointer();//获取图像首地址
intnOffset=stride-b.Width*3;//实际宽度与系统宽度的距离
bytered,green,blue;
for(inty=0;y<b.Height;++y)
{
for(intx=0;x<b.Width;++x)
{
blue=p[0];
green=p[1];
red=p[2];
p[0]=p[1]=p[2]=(byte)(.299*red+.587*green+.114*blue);//转换公式
p+=3;//跳过3个字节处理下个像素点
}
p+=nOffset;//加上间隔
}
}
b.UnlockBits(bmData);//解锁
returnb;
}