2

ビットマップに描画する必要がありますが、その透明ピクセルには描画しませんか?

写真の例: http://i.stack.imgur.com/QvJTZ.png

私はこのコードを書きました:

import flash.display.Bitmap;
import flash.events.Event;
import flash.geom.Matrix;

var s:S = new S();
var m_bitmapData = new BitmapData(s.width, s.height, true, 0x00000000);
m_bitmapData.draw(s);
var hole=new Sprite();

var hole_matrix:Matrix
hole.graphics.beginFill(0x000000);
hole.graphics.drawCircle(0,0,30);


var bmp:Bitmap = new Bitmap(m_bitmapData);
bmp.x = 50
bmp.y =50 

stage.addChild(bmp);

addEventListener(Event.ENTER_FRAME,asd);
function asd(e:Event):void{
    hole_matrix=new Matrix();
    hole_matrix.translate(mouseX-bmp.x,mouseY-bmp.y);
    m_bitmapData.draw(hole,hole_matrix);
}

しかし、結果は絵のような「NO」。

誰か説明してもらえますか?

4

1 に答える 1

0

アルファチャンネルを保持してから、コピーして戻します。

var tempBD:BitmapData=new BitmapData(m_bitmapData.width,m_bitmapData.height,true,0);
...
function asd(e:Event):void {
    ...
    tempBD.copyChannel(m_bitmapData,m_bitmapData.rect,new Point(),BitmapDataChannel.ALPHA,BitmapDataChannel.ALPHA);
    m_bitmapData.draw(hole,hole_matrix);
    m_bitmapData.copyChannel(tempBD,tempBD.rect,new Point(),BitmapDataChannel.ALPHA,BitmapDataChannel.ALPHA);
}

基本的にあなたがすること: キャンバスの BitmapData と同じサイズの BitmapData が別の場所にあり、その BitmapData にアルファ チャネルをコピーし、必要なものを描画してから、アルファ チャネルをコピーして戻します。透明なものは透明のままでした。アルファチャンネルを変更したくない場合は、一copyChannel()度だけ削除してから元に戻すことができます。

于 2012-11-08T13:17:07.137 に答える