如何在C#中指定RGB值范围

Out*_*ion 3 .net c# .net-3.5 visual-studio-2008

在表格上我有一个PictureBox按钮,用于在图片框中加载图像,还有几个按钮可以对加载到图片框中的图像进行一些操作.

我加载一个位图图像到PictureBox,然后我想上的像素范围来执行一些操作rgb(150,150,150)rgb(192,222,255)加载的图像的.

  • 是否可以使用SetPixel方法执行此操作?
  • 有没有办法在C#中指定RGB值范围?

Gro*_*roo 5

简单的方法是这样的:

for (int i = 0; i < width; i++)
   for (int j = 0; j < height; j++)
   {
       Color c = bitmap.GetPixel(i, j);
       if (ColorWithinRange(c))
       {
           // do stuff
       }
   }
Run Code Online (Sandbox Code Playgroud)

有了ColorWithinRange这样定义的:

private readonly Color _from = Color.FromRgb(150, 150, 150);
private readonly Color _to = Color.FromRgb(192, 222, 255);
bool ColorWithinRange(Color c)
{
   return 
      (_from.R <= c.R && c.R <= _to.R) &&
      (_from.G <= c.G && c.G <= _to.G) &&
      (_from.B <= c.B && c.B <= _to.B);
}
Run Code Online (Sandbox Code Playgroud)

对于大尺寸的位图,但是,GetPixelSetPixel变得很慢.因此,在您实现算法之后,如果感觉很慢,您可以使用该Bitmap.LockBits方法固定位图(防止GC在内存中移动它)并允许自己快速不安全地访问单个字节.