簡體   English   中英

為什么c#位圖setPixel()方法不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM