1. 程式人生 > >C#實現把彩色圖片灰度化代碼分享

C#實現把彩色圖片灰度化代碼分享

turn pub mil int stride 方法 wid 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;
 } 

除聲明外,跑步客文章均為原創,轉載請以鏈接形式標明本文地址
C#實現把彩色圖片灰度化代碼分享

本文地址: http://www.paobuke.com/develop/c-develop/pbk23669.html






相關內容

技術分享C#實現動態數據繪圖graphic的方法示例技術分享C#操作word的方法示例技術分享C#實現的AES加密解密完整實例技術分享C#實現順序表(線性表)完整實例
技術分享winform實現創建最前端窗體的方法技術分享C#中const用法詳解技術分享C#定時關閉窗體實例技術分享C#實現appSettings節點讀取與修改的方法

C#實現把彩色圖片灰度化代碼分享