C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

フラッドフィルアルゴリズム– C ++のペイントでfill()を実装する方法


この問題では、2次元画面を表す2次元配列、色で塗りつぶされる画面上のピクセルの座標、および色が与えられます。私たちのタスクは、現在のピクセルとその色を持つすべての隣接するピクセルに色を付けるプログラムを作成することです。

ペイントでの着色 、色を選択し、指定されたピクセルをブラシでクリックします。

問題を理解するために例を見てみましょう

入力:Sceen [] [] ={{W、W、B、W、W、W、W、W}、{W、W、W、W、W、W、B、B}、{W 、B、B、W、W、B、W、W}、{W、Y、Y、Y、Y、B、W、B}、{B、W、W、Y、Y、B、W、B }、{B、W、W、Y、Y、Y、Y、B}、{W、B、W、W、W、Y、W、W}、{W、W、B、B、W、Y 、Y、W}}; X =5、Y =5、newColor =R.Output:{{W、W、B、W、W、W、W、W}、{W、W、W、W、W 、W、B、B}、{W、B、B、W、W、B、W、W}、{W、R、R、R、R、B、W、B}、{B、W、W 、R、R、B、W、B}、{B、W、W、R、R、R、R、B}、{W、B、W、W、W、R、W、W}、{W 、W、B、B、W、R、R、W}}; 

フラッドフィルアルゴリズム

このアルゴリズムでは、ピクセルがすでに選択された前の色になっている場合、ピクセルは新しい色で塗りつぶされます。前の色が前の色でない場合、そのピクセルは塗りつぶされません。ピクセルを埋めた後、同じことを行うために、上、下、左、右のピクセルをチェックします。詳細はこちら。

ソリューションアプローチ

この問題を解決する1つの方法は、再帰的アプローチを使用することです。着色する必要のある最初のピネルを見つけてから、隣接する4つのピクセルすべてをチェックします。同じ色に合わせてから、新しい色に置き換えて、現在のピクセルの隣接ピクセルで繰り返します。隣接するピクセルの色が異なる場合は、そのままにしておきます。開始ピクセルと同じ色の隣接するすべてのピクセルが色付けされるまで、これらの手順を実行します。次に、充填アルゴリズムを停止します。

ソリューションの動作を説明するプログラム

 #include  using namespace std; #define M 8#define N 8void fillColorAdj(char screen [] [N]、int x、int y、char oldColor、char color){if(x <0 || x> =M || y <0 || y> =N)return; if(screen [x] [y]!=oldColor)return; if(screen [x] [y] ==color)return; screen [x][y]=色; fillColorAdj(screen、x + 1、y、oldColor、color); fillColorAdj(screen、x-1、y、oldColor、color); fillColorAdj(screen、x、y + 1、oldColor、color); fillColorAdj(screen、x、y-1、oldColor、color);} void fillColor(char screen [] [N]、int x、int y、char color){char oldColor =screen [x] [y]; if(oldColor ==color)return; fillColorAdj(screen、x、y、oldColor、color);} int main(){char screen [M] [N] ={{'W'、'W'、'B'、'W'、'W'、 'W'、'W'、'W'}、{'W'、'W'、'W'、'W'、'W'、'W'、'B'、'B'}、{'W '、' B'、' B'、' W'、' W'、' B'、' W'、' W'}、{' W'、' Y'、' Y'、' Y'、' Y '、' B'、' W'、' B'}、{' B'、' W'、' W'、' Y'、' Y'、' B'、' W'、' B'}、{ 'B'、'W'、'W'、'Y'、'Y'、'Y'、'Y'、'B'}、{'W'、'B'、'W'、'W'、 'W'、'Y'、'W'、'W'}、{'W'、'W'、'B'、'B'、'W'、'Y'、'Y'、'W'} 、}; int x =5、y =5; char color ='R'; cout <<"初期画面の座標は次のとおりです:\ n"; for(int i =0; i  

出力

最初の画面の座標は次のとおりです:W W B W W W W WW W W W W W B BW B B W W B W WW Y Y Y Y B W BB W W Y Y B W BB W W Y Y Y Y BW B W W W Y W WW W B B W Y Y W 
  1. フラッドフィルアルゴリズム

    1つの行列が与えられます。マトリックスは1つの画面を表しています。画面の各要素(i、j)はピクセルとして示され、そのピクセルの色は異なる番号でマークされます。このアルゴリズムでは、ピクセルがすでに選択された前の色になっている場合、ピクセルは新しい色で塗りつぶされます。前の色が前の色でない場合、そのピクセルは塗りつぶされません。ピクセルを埋めた後、同じことを行うために、上、下、左、右のピクセルをチェックします。 アイデアは本当に単純です。まず、選択した位置が前の色で色付けされているかどうかを確認します。そうでない場合、アルゴリズムは機能しません。それ以外の場合は、そのピクセルを新しい色で塗りつ

  2. Cグラフィックを使用したフラッドフィルアルゴリズム

    コンセプト 特定の長方形に関して、私たちのタスクは、フラッドフィルアルゴリズムを適用してこの長方形を塗りつぶすことです。 入力 rectangle(left = 50, top = 50, right= 100, bottom = 100) floodFill( a = 55, b = 55, NewColor = 12, OldColor = 0) 出力 メソッド //(a、b)の前の色OldColorと(a、b)の周囲のすべてのピクセルを新しい色 NewColorとfloodFill(a、b、NewColor、OldColor)に置き換える再帰関数 aまたはbが画面