[英]Winforms RGB Image to Grayscale 8-bit and 16-bit
我有一個分配,我想將RGB圖像轉換為灰度8位和16位。 我從谷歌那里得到了這個公式,但是它不是8位還是16位。 有人可以解釋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位圖像的RGB值在0到255之間。一個16位圖像的RGB值在0到65535之間
假設您有一個8位白色值,RGB全部設置為255。
計算結果為255(全白),這是正確的。
同樣,將RGB全部設置為65535的16位白色的結果將得到65536(全白),這也是正確的。
此縮放有效,因為0.3 + 0.59 + 0.11 = 1.0
對於非白色的值,縮放比例的工作原理類似。 當然,黑色將始終使RGB全部為零,這將始終為0。
順便提一句,這些數字的原因是它們近似於人眼對這些顏色的反應。 我們的眼睛對綠色更敏感,因此綠色成分比紅色或藍色對最終發光度的貢獻更大。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.