3

Shape.graphics.drawRoundRect()を使用して描画した形状がありlineStyleます。Bitmapその形状を使用してキャプチャしようとしてBitmapData.draw()いますが、ストロークに問題があります。下記参照:

ここに画像の説明を入力

ご覧のとおり、draw()(およびdrawWithQuality()) を使用するとストロークがクリップされます。線はオブジェクトの中心に描画されるため、(例で使用したように) 4 の太さは、形状の領域の外側に 2 ピクセル、内側に 2 ピクセルを持ちます。draw() は (0,0) から (BitmapData.width,BitmapData.height) までのすべてをキャプチャするように見えるので、(0,0) の左側と上部のすべてが失われます。clipRect オプションを使用して補正しようとしましたが、皮肉なことに、クリップされた境界線が均一になりました。

その残りのデータをキャプチャする方法はありますか?

4

2 に答える 2

3

より一般的な解決策として、オブジェクトの境界を独自の座標空間で取得し、それを使用して のサイズを設定し、BitmapDataをオフセットできdraw()ます。

import flash.geom.Matrix;
import flash.geom.Rectangle;

const thickness:int = 4;
const radius:int = 10;
const size:int = 100;

var shape:Shape = new Shape();
shape.graphics.lineStyle( thickness, 0xaaaaaa );
shape.graphics.beginFill( 0xdddddd );
shape.graphics.drawRoundRect( 0, 0, size, size, radius, radius );
shape.graphics.endFill();
addChild( shape );

var bounds:Rectangle = shape.getBounds(shape);
var m:Matrix = new Matrix();
m.translate(-bounds.left, -bounds.top);

var bmp1:Bitmap = new Bitmap();
bmp1.bitmapData = new BitmapData( bounds.width, bounds.height, true, 0 );
bmp1.x = 310;
bmp1.y = 100;
addChild( bmp1 );
bmp1.bitmapData.draw( shape, m );
于 2013-04-09T20:19:43.833 に答える