欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#实现把彩色图片灰度化代码分享

程序员文章站 2024-02-15 09:12:58
彩色图片转为灰度图的公式如下: 复制代码 代码如下: 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; 
 }