Winforms的RGB图像灰度8位和16位

问题描述:

我有一个任务,我想将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://*.com/questions/2265910/convert-an-image-to-灰度 – Swarup

+1

8位将给你256从纯黑色到纯白色。 16位会给你65536。 –

这将适用于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.

顺便提一句,这些数字的原因是它们接近人眼对这些颜色的响应。我们的眼睛对绿色更敏感,所以绿色成分对最终发光度的贡献大于红色或蓝色。