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;
}
答
这将适用于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.
顺便提一句,这些数字的原因是它们接近人眼对这些颜色的响应。我们的眼睛对绿色更敏感,所以绿色成分对最终发光度的贡献大于红色或蓝色。
访问http://stackoverflow.com/questions/2265910/convert-an-image-to-灰度 – Swarup
8位将给你256从纯黑色到纯白色。 16位会给你65536。 –