C#实现把彩色图片灰度化代码分享
程序员文章站
2023-12-17 21:53:34
彩色图片转为灰度图的公式如下:
复制代码 代码如下:
gray(i,j) = 0.299 * red(i,j)+0.587*green(i,j)+0.114*blue(...
彩色图片转为灰度图的公式如下:
复制代码 代码如下:
gray(i,j) = 0.299 * red(i,j)+0.587*green(i,j)+0.114*blue(i,j)
其中gray(i,j) 为转化后的灰度值 (i,j)为像素点的位置。
源代码如下:
public static bitmap changegray(bitmap b) { bitmapdata bmdata = b.lockbits(new rectangle(0, 0, b.width, b.height), imagelockmode.readwrite, pixelformat.format24bpprgb); int stride = bmdata.stride; // 扫描的宽度 unsafe { byte* p = (byte*)bmdata.scan0.topointer(); // 获取图像首地址 int noffset = stride - b.width * 3; // 实际宽度与系统宽度的距离 byte red, green, blue; for (int y = 0; y < b.height; ++y) { for (int x = 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); // 解锁 return b; }
推荐阅读