2016-12-01 9 views
-1

こんにちは、私は小さな問題を持っています。C#グラフィック塗りつぶしツール

私は私はこの画像に着色画素を有しているか、空であるかどうかを検出する必要がある画像の聖霊降臨祭のサイズ32×32

のリストを持っています。例えば

私のイメージ [。 ]

ドットはイメージ内のピクセルです。 私はこのコードを使用しているが、すべての場合には

bool tile_preset = false; 

          for(int b = 0; b < temp.Height;b++) 
          { 
           for(int a = 0; a < temp.Width; a++) 
           { 
            Color c = temp.GetPixel(a, b); 
            tile_preset = (c.A != 0 && c.R != 0 && c.G != 0 && c.B != 0) ? true : false; 
if (tile_present) 
break; 


           } 
          } 

に動作し、私が持っている偽の私が持っているフルカラー画像を使用し、他の

+2

このコードは、最後のピクセルが条件を満たす場合のみtrueを返します。 –

+0

私は、このコードを変更する必要があると思います: - (c.R!= 0 || c.G!= 0 || c.B!= 0)カラーピクセルとしてアルファをチェックする必要はないと思います。 –

+0

@MehrzadChehraz私はブレントステートメントを修正しましたが、何もありません。 –

答えて

1

コードはいくつかの方法で「間違った」であります。まず、画像内の「非着色」のピクセルはすべてARGB(0,0,0,0)ですか?

もしそうなら、の色値のが0でない場合、色付きのピクセルが見つかります。あなたのコードは、すべてが0でないかどうかをチェックするので、フルレッドのピクセルはカウントされません!

また、あなたが持っている表現はすでにブール値です。ブール値をブール値に変換するのに3項演算子を使用するのはなぜですか?

第3の場合:であり、ニュートラルでないピクセルを見つけるとすぐにループを終了する必要があります。

bool tile_preset = false; 

for(int b = 0; b < temp.Height && !tile_preset; b++) 
{ 
    for(int a = 0; a < temp.Width && !tile_preset; a++) 
    { 
     Color c = temp.GetPixel(a, b); 
     tile_preset = (c.A != 0 || c.R != 0 || c.G != 0 || c.B != 0); 
    } 
} 

ピクセルを見つけた場合にのみ、tile_presetが変更されていることを確認する必要があります。

bool tile_preset = false; 

for(int b = 0; b < temp.Height; b++) 
{ 
    for(int a = 0; a < temp.Width; a++) 
    { 
     Color c = temp.GetPixel(a, b); 
     tile_preset |= (c.A != 0 || c.R != 0 || c.G != 0 || c.B != 0); 
    } 
} 

これは着色画素を見つけたときfalseからtrueに変更するtile_presetが発生しますが、次のピクセルが再び中性であるときfalseに戻って変更することはありません。

+0

アルファ値もチェックする必要がありますか? –

+0

本当にあなたは 'ARGB(67,0,0,0)'を有色画素とみなしているかどうかにかかっています:-)これは** your **の定義なので、次のようになります:あなたのシナリオでアルファ値が適切な場合は、それ。赤、緑、青の値だけが必要な場合は、しないでください。 –

関連する問題