[英]Why doesn't c# bitmap setPixel() method work?
我有一個方法,它接受一個矩形的數字,並“空白”該區域的像素(將它們變成白色)。 出於某種原因,雖然當我的程序搜索非白色像素時,它找到了我剛設置為白色的像素。
為什么說它不是白色的呢? 我有一個被裁剪的圖像並保存到我的硬盤中。 所以我能夠看到它說不是白色的區域,但是當我打開圖像時,它可以是完全白色的。 所以我很遺憾為什么這不起作用。 程序每次都停在相同的像素上。 它說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雖然......
編輯2-“嘗試讀取或寫入受保護的內存。這通常表示其他內存已損壞。” 當我試圖做鎖定和解鎖位的例子時被拋出。 一旦它試圖將這些位復制到數組中,它就拋出了它。 顯然這是不允許的。
謝謝你的答案。
您可以嘗試使用之前的Bitmap.Lockbits()方法,並在更改像素后使用Bitmap.Unlockbits()。
實際上,這是一個例子: http : //msdn.microsoft.com/en-us/library/5ey6h79d.aspx
刪除if (t == w) break;
在你的第一個函數中,無論是w
(你沒有描述)。 我想代碼中斷了,你最終得到了一個不完整的白色區域。
為初學者檢查白色是否更有意義?
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.