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