2

私は典型的なフラッドフィルアルゴリズムを実装しましたが、ARGBコンポーネント間のユークリッド距離を使用して色を比較する場合、単色を使用すると期待どおりに機能します。

私の問題は、透明な背景にアンチエイリアス処理された赤い線のようなものを描画すると、フラッドフィルアルゴリズムがほとんどの半透明のピクセルを塗りつぶさず、オブジェクトの周りにフリンジが残ることです。特にこの例では、線の中心は赤一色(つまり、ARGB形式では(255、255、0、0))であり、線のフリンジも赤一色ですが、これらのピクセルのアルファは1%アルファまでの範囲です。 (つまり、(1、255、0、0))。一般的には、アンチエイリアス処理された円の輪郭を描画できるようにし、中央に塗りつぶしを塗りつぶし、フリンジを残さないようにします。

色を比較するためにどの関数を使用しますか、および/またはそのようなフリンジがオブジェクトの周りに残らないようにフラッドフィルアルゴリズムをどのように適応させるのですか?

アルファが90%未満の場合、常にピクセルを塗りつぶすようにアルゴリズムに指示してみました。これは問題ないように見えることもありますが、かすかな線を塗りつぶすにはあまりにも積極的です。

編集:これがどのように見えるかを詳しく説明するために、0-5が0、20、40、60、80、および100%アルファの赤いピクセルを表す場合、アンチエイリアスされた赤い線の画像は次のようになります。

0 0 0 0 0 0 0

0 0 0 3 0 0 0

0 0 3 5 3 0 0

0 0 3 5 3 0 0

0 0 3 5 3 0 0

0 0 0 3 0 0 0

0 0 0 0 0 0 0

左上隅を赤で塗りつぶす現在のフラッドフィルアルゴリズムは、すべての0を5に置き換えます。残りの3は、線の周りに見苦しいハローを形成します。

4

1 に答える 1

0

フラッド フィルは色の RGB 部分を置き換える必要がありますが、元のアルファはそのままにしておきます。そうすれば、ブレンド比率を変更せずに新しい色を取得できます。

(ビットマップが事前に乗算されたアルファを使用している場合は、置換 RGB を既存のアルファでスケーリングする必要がありますが、例では、事前に乗算されたアルファを使用していません。)

于 2011-05-22T13:56:40.830 に答える