0

オブジェクトを表すさまざまなピクセルを持つ BitmapData と、その周囲のいくつかの黒いピクセルを削除したいとします。

オブジェクトの幅と高さが黒以外のピクセルで表される、新しい BitmapData を取得したいと思います。

たとえば、400x400px の BitmapData があるとしますが、黒以外のピクセルで表されるオブジェクトが四角形 (x=100、y=100、幅=200、高さ=200) を占めているとします。その四角形を表す新しい BitmapData を取得したいので、すべての黒いピクセルを削除する必要があります。もちろん、その長方形の座標はありません。完全な黒のビットマップデータと元のビットマップデータを何らかの形で区別し、新しいビットマップデータ (幅と高さが異なる) を作成する必要があります。

これを行う方法について何か考えはありますか?

4

1 に答える 1

5

getColorBoundsRectを使用して、BitmapData 内の異なる色のピクセルの寸法を見つけることができます。

//some fake data
var yourBigBmd:BitmapData = new BitmapData( 300, 300, false, 0 );
yourBigBmd.fillRect( new Rectangle( 10, 10, 30, 60 ), 0xFF0000 );
//a little notch
yourBigBmd.fillRect( new Rectangle( 10, 10, 10, 10), 0x00000 );

var blackColor:uint = 0x000000;
var littleBmdBounds:Rectangle = yourBigBmd.getColorBoundsRect( 0xFFFFFF, blackColor, false );
trace( "littleBmdBounds: " + littleBmdBounds );

これはlittleBmdBounds をトレースします: (x=10, y=10, w=30, h=60)

次に、これらの境界内にあるものを新しい BitmapData にコピーする必要があります。

var littleBmd:BitmapData = new BitmapData( littleBmdBounds.width, littleBmdBounds.height, true, 0 );
var mx:Matrix = new Matrix();
mx.translate( -littleBmdBounds.x, -littleBmdBounds.y );
littleBmd.draw( yourBigBmd, mx );

最後に、しきい値を使用して残っている黒をすべて削除し、透明にします。

var blackAlphaColor:uint = 0xFF000000;
var transparentColor:uint = 0x00000000;
littleBmd.threshold( littleBmd, littleBmd.rect, littleBmd.rect.topLeft, "==", blackAlphaColor, transparentColor )
于 2010-04-19T12:26:11.757 に答える