2015-10-07 149 views
0

我有一個任務,我想將RGB圖像轉換爲灰度8位和16位。我從谷歌獲得這個公式,但它不是這是8位還是16位。有人可以解釋8位灰度和16位灰度之間的區別嗎?Winforms的RGB圖像灰度8位和16位

int i, j; 
if (File != null) 
{ 
    File2 = new Bitmap(File); 
    for (i = 0; i <= File2.Width - 1; i++) 
    { 
     for (j = 0; j <= File2.Height - 1; j++) 
     { 
      Color originalColor = File2.GetPixel(i, j); 
      int grayScale = (int)((originalColor.R * .3) + (originalColor.G * .59) + (originalColor.B * .11)); 
      Color newColor = Color.FromArgb(grayScale, grayScale, grayScale); 
      File2.SetPixel(i, j, newColor); 
     } 
    } 
    hasilBox.Width = File2.Width; 
    hasilBox.Height = File2.Height; 
    hasilBox.Image = File2; 
} 
+0

訪問http://stackoverflow.com/questions/2265910/convert-an-image-to-灰度 – Swarup

+1

8位將給你256從純黑色到純白色。 16位會給你65536。 –

回答

1

這將適用於8位,16位和24位圖像。

8位圖像具有0到255 16位圖像之間的RGB值介於0和65535

之間的RGB值讓我們假設你有RGB 8位的白色值都設爲255

計算結果爲255(全白),這是正確的。

類似地,RGB全部設置爲65535的16位白色的結果將導致65536(全白),這也是正確的。

該縮放工作,因爲0.3 + 0.59 + 0.11 = 1.0

對於不是白色的值,縮放工作方式類似。當然,黑色的RGB始終爲零,總是爲0.

順便提一句,這些數字的原因是它們接近人眼對這些顏色的響應。我們的眼睛對綠色更敏感,所以綠色成分對最終發光度的貢獻大於紅色或藍色。