Out*_*ion 3 .net c# .net-3.5 visual-studio-2008
在表格上我有一个PictureBox按钮,用于在图片框中加载图像,还有几个按钮可以对加载到图片框中的图像进行一些操作.
我加载一个位图图像到PictureBox,然后我想上的像素范围来执行一些操作rgb(150,150,150)以rgb(192,222,255)加载的图像的.
SetPixel方法执行此操作?简单的方法是这样的:
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)
对于大尺寸的位图,但是,GetPixel并SetPixel变得很慢.因此,在您实现算法之后,如果感觉很慢,您可以使用该Bitmap.LockBits方法固定位图(防止GC在内存中移动它)并允许自己快速不安全地访问单个字节.