将位图转换为阈值(纯黑白)

本文关键字:纯黑 黑白 阈值 位图 转换 | 更新日期: 2023-09-27 18:12:33

我已经尝试过这个代码将位图转换为纯黑白-而不是灰度,但这给了我一个纯黑色的图像。

public Bitmap blackwhite(Bitmap source)  
    {
    Bitmap bm = new Bitmap(source.Width,source.Height);  
    for(int y=0;y<bm.Height;y++)   
    { 
    for(int x=0;x<bm.Width;x++) 
    {
    if (source.GetPixel(x, y).GetBrightness() > 0.5f) 
    {
    source.SetPixel(x,y,Color.White); 
    } 
    else  
    {
    source.SetPixel(x,y,Color.Black);  
    } 
    } 
    } 
    return bm; 
    }

是什么导致这样的问题?有别的方法吗?

将位图转换为阈值(纯黑白)

我知道这个答案太迟了,但我只是想出来,希望它能帮助到其他有这个问题的人。

我得到图片的平均亮度,并使用它作为设置像素为黑色或白色的阈值。它不是100%准确,也绝对不是针对时间复杂性进行优化的,但它完成了工作。

public static void GetBitmap(string file)
        {
            using (Bitmap img = new Bitmap(file, true))
            {    
                // Variable for image brightness
                double avgBright = 0;
                for (int y = 0; y < img.Height; y++)
                {
                    for (int x = 0; x < img.Width; x++)
                    {
                        // Get the brightness of this pixel
                        avgBright += img.GetPixel(x, y).GetBrightness();
                    }
                }
                // Get the average brightness and limit it's min / max
                avgBright = avgBright / (img.Width * img.Height);
                avgBright = avgBright < .3 ? .3 : avgBright;
                avgBright = avgBright > .7 ? .7 : avgBright;
                // Convert image to black and white based on average brightness
                for (int y = 0; y < img.Height; y++)
                {
                    for (int x = 0; x < img.Width; x++)
                    {
                        // Set this pixel to black or white based on threshold
                        if (img.GetPixel(x, y).GetBrightness() > avgBright) img.SetPixel(x, y, Color.White);
                        else img.SetPixel(x, y, Color.Black);
                    }
                }
                // Image is now in black and white
            }