我有一个方法,它接收一个矩形的数字,并“空白”该区域的像素(将它们变成白色)。出于某种原因,虽然当我的程序搜索非白色像素时,它找到了我刚设置为白色的像素。
为什么说它不是白色的?我有一个被裁剪的图像并保存到我的硬盘中。所以我能够看到它说不是白色的区域,但是当我打开图像时,它可以是完全白色的。所以我很遗憾为什么这不起作用。程序每次都停在相同的像素上。它说R值是238,我知道像素被设置为白色,因为我通过调试器并观察像素值进入bmp.SetPixel
方法。
这是“消隐”方法的代码:
void blankArea(int x, int y, int width, int height)
{
for (int i = y; i <= height+y; ++i)
for (int t = x; t <= width+x; ++t)
{
if (t == w)
break;
bmp.SetPixel(t, i, Color.White);
}
}
这是代码表示像素不是白色:
bool allWhiteColumn (int col)
{
for (int i = 5; i < h; ++i)
if (bmp.GetPixel(col - 1, i).R < 248 && bmp.GetPixel(col - 1, i).G < 248)
{
imageBelowColumEnd = bmp.GetPixel(col - 1, i).R;
this.row = i;
return false;
}
return true;
}
在这一点上的任何帮助将不胜感激。在我将它设置为白色后,我不知道为什么它说R是238。感谢
编辑 - 自从我发表评论后,我会编辑。拿出if,什么也没做。同样的问题。我无法检查纯白色。该程序从扫描仪中找到图像。因此,由于扫描仪“白色”区域不是真白色,我无法寻找Color.WHITE。我会尝试使用bitlock ...EDIT 2-“尝试读取或写入受保护的内存。这通常表示其他内存已损坏。”当我试图做锁定和解锁位的例子时被抛出。一旦它试图将这些位复制到数组中,它就抛出了它。显然这是不允许的。
感谢您的回答。
答案 0 :(得分:1)
您可以尝试使用之前的Bitmap.Lockbits()方法,并在更改像素后尝试使用Bitmap.Unlockbits()。
实际上,这是一个例子:http://msdn.microsoft.com/en-us/library/5ey6h79d.aspx
答案 1 :(得分:1)
删除第一个函数中的if (t == w) break;
,无论是w
(您没有描述)。我想代码中断了,你最终得到了一个不完整的白色区域。
答案 2 :(得分:0)
为初学者检查白色会不会更有意义吗?
bool allWhiteColumn (int col)
{
for (int i = 5; i < h; ++i)
if (bmp.GetPixel(col - 1, i) != Color.White)
{
imageBelowColumEnd = bmp.GetPixel(col - 1, i).R;
this.row = i;
return false;
}
return true;
}