簡體   English   中英

Winforms RGB圖像轉換為灰度8位和16位

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM