アルファ チャネルを持つ 2 つの BitmapData オブジェクトがあります。アルファを含む各チャネルに max(channel_image_one, channel_image_two) を使用して、それらを 1 つに結合したいと思います。この結果を達成する簡単な方法はありますか?
2 に答える
Alpha シャネルをそのようにマージする単純な bitmapdata メソッドはないと思います。RGB は、ブレンド モードを適用する draw() の助けを借りておそらく行うことができますが、シャネルごとに厳密な最大値が必要な場合は機能しないと思います)。
さらに、 PixelBenderのおかげでシェーダーを作成して、このタスクを実行できます。そのような操作に最適なツールです。
パフォーマンスは遅くなりますが、PB に慣れていない場合は、BitmapData.getPixel32()/setPixel32() を使用してピクセルを 1 つずつ反復/比較/書き込むことができます。その場合は、 BitmapData.lock()/unlock() を使用してパフォーマンスを向上させることを検討してください。
LIGHTENブレンド モードと同等の max(image_one,image_two) が必要な場合。
Foundation ActionScript 3.0 Image Effectsのスニペットを次に示します。
public function lighten(topPixel:uint, bottomPixel:uint):uint{
return Math.max(topPixel,bottomPixel);
}
ソース zipの Chapter 2 フォルダーから必要なファイルを取得できます。
Theo のアドバイスを使用して
- ロック()
- ループ用
- ロック解除()
BitmapData で高速化するか、PixelBender を使用します。どうやら Adobe によると、 Flash Player ユーザーの 90% 以上が既にバージョン 10 を使用しています。