簡體   English   中英

灰度到 RGB:像素顏色設置錯誤值

[英]Grayscale to RGB: Pixel color is set with wrong value

我有一個程序可以讀取像素的灰度(0 - 255)值並將其更改為 RGB 顏色(公式參見代碼)。

這是我的代碼:

Bitmap img = new Bitmap(@"somepath");
        Bitmap new_img = new Bitmap(img.Width, img.Height);
        for (int i = 0; i < img.Width; i++)
        {
            for (int j = 0; j < img.Height; j++)
            {
                Color pixel = img.GetPixel(i, j);
                Color my = new Color();

                int R_new = 0;
                if (pixel.R > 126)
                {
                    R_new = (pixel.R -127) / 128  * 255;
                }
                
                int B_new = 0;
                if (pixel.B < 128) {
                    B_new = (1 - pixel.R / 127) * 255;
                }

                int G_new = 0;
                if (pixel.G < 128) {
                    G_new = pixel.R/127 * 255;
                }


                my = Color.FromArgb(R_new, G_new, B_new);

                new_img.SetPixel(i, j, my);     
            }
        }
        new_img.Save(@"C:somepath");

在下圖中在此處輸入圖像描述 您可以看到舊像素的綠色值為 6,而新像素的綠色值設置為 255,這是錯誤的。 根據公式,它應該設置為 12。

這是我的問題:為什么像素集的值是錯誤的?

你有兩個問題。

#1:您傳遞的是藍色值而不是綠色值。 檢查arguments 的預期順序

Color.FromArgb(int red, int green, int blue)

#2: B_new255 ,因為integer 划分是如何處理的:

對於 integer 類型的操作數, /運算符的結果是 integer 類型,並且等於兩個操作數的商,四舍五入到零:

(1 - 6 / 127) * 255 // becomes 255

所以, 6 / 127等於0.047244094488189但它被四舍五入到零......制作你的公式:

(1 - 0) * 255 // becomes 255

將至少一個除法項設為浮點類型,您將得到一個十進制值:

(1 - pixel.R / 127.0) * 255 // becomes 242.9527559055118

...然后您必須將其轉換為int以符合Color.FromArgb(int, int, int)的方法簽名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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