作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在一个窗体上,我有一个 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
}
}
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);
}
然而,对于大尺寸的位图,GetPixel
和 SetPixel
变得非常慢。所以,在你实现你的算法之后,如果感觉很慢,你可以使用 Bitmap.LockBits
固定位图的方法(防止 GC 在内存中移动它)并允许您快速不安全地访问单个字节。
关于c# - 如何在 C# 中指定 RGB 值的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8884144/
我是一名优秀的程序员,十分优秀!