2012-01-03 14 views
0

私は、矩形の数値を取り込み、その領域のピクセルを「白くする」方法を持っています。何らかの理由で私のプログラムが白以外のピクセルを検索しても、私は白に設定したものを見つける。なぜc#bitmap setPixel()メソッドが機能しないのですか?

なぜそれが白ではないと言っているのですか?私は切り取られ、私のハードドライブに保存されているイメージを持っています。だから私はそれが白ではないと言う領域を見ることができる、しかし、私は画像を開くと、その完全に白いことができます。だから、なぜこれがうまくいかないのか、私は迷っている。プログラムは毎回同じピクセルで停止します。それは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であると言っている理由が分かりません。ありがとう

EDIT-私はコメントを投稿するので、代わりに編集します。 ifを取って、何もしなかった。同じ問題。私は無地の白を確認できません。プログラムはスキャナから画像を探します。スキャナの「白」領域は真ではないため、Color.WHITEを探すことはできません。しかし、私は噛み付いてみてください...

EDIT 2- "保護されたメモリを読み書きしようとしました。これは、しばしば他のメモリが壊れていることを示しています。"私はビットのロックとロック解除の例をしようとしたときにスローされました。ビットを配列にコピーしようとすると、それは投げられました。どうやらそれは許されない。

回答ありがとうございます。

+0

Lockbits()メソッドは一度しか使用しないでください(ループに入れないでください)。あなたはmsdnのものに似たようなあなたの例をしようとすることができます、私はこれをちょうど2日前に使用したので、私の魅力のように動作します。この例のように配列インデックスを使用して値を設定しているのですか、それともまだbitmap.SetPixel()を使用していますか? – neeKo

+0

私はついにそれを理解しました。私はこの問題全体を引き起こした1つのことを見落としていました。ありがとう。ビットのロックについては、私は自分のサイトからコードを直接コピーし、それがコピー部に初めて入ったときに、そのエラーを投げた。私のビットマップイメージは既にbmpと呼ばれていたので、コードに触れる必要はありませんでした。 –

答えて

1

は(あなたが記述しなかった)wが何であれ、あなたの最初の関数でif (t == w) break;を削除してください。私はコードが壊れて、あなたは不完全な白い領域に終わると思います。

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; 
} 
関連する問題