c# - 基于亮度的位图像素替换

标签 c# image-processing

简而言之,我想将图像中的任何像素设置为亮度大于给定阈值的白色。我编写了以下代码,这些代码可以快速准确地实现我的目的。

using (Bitmap image = new Bitmap("C:\\temp\\test1.png"))
{
    for (int x = 0; x < image.Width; x++)
    {
        for (int y = 0; y < image.Height; y++)
        {
            Color c = image.GetPixel(x, y);
            float f = c.GetBrightness(); //From 0 (black) to 1 (white)

            if (f > 0.1) { image.SetPixel(x, y, Color.White); }
        }
    }

    image.Save("C:\\temp\\test2.png");
}


但是,感觉到必须一个接一个地循环遍历每个像素是不对的。是否存在使用另一种.NET Imaging或Graphics方法解决此问题的优化方法?

最佳答案

对于某些特殊情况(例如2个阈值的幂),您可以使用位屏蔽技巧来处理32位块,但我怀疑这样做会为您带来很多好处。您提供的代码中更大的开销是GetPixelSetPixel调用,它们的效率非常低。您可以使用LockBits方法极大地加快该过程,并直接从byte[]处理基础数据。

关于c# - 基于亮度的位图像素替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12932903/

相关文章:

java - 使用 Scale 调整大小时,具有透明背景的 PNG 变为黑色

image - 如何找到错误图像?

image - 消除图像中字符的噪声

ruby-on-rails - 如何从图像中读取条形码

c# - 值类型和引用类型只是 C# 概念?

c# - 如何将不连续的单元格传递给 Excel UDF

c# - : printf ("%s", ""); 的 C# 等价物是什么?

c# - 与 RELEASE 模式相比,log4net 在 DEBUG 模式下使用不同的 xml 配置文件

c# - TFS 构建失败,因为它似乎在错误的位置查找引用

php - 捕获来自CCTV或移动摄像机的视频