2012-11-08 5 views
2

Je dois dessiner sur un bitmap mais ne pas dessiner sur les pixels transparents de celui-ci?comment dessiner sur bitmap, mais pas dessiner sur des pixels transparents?

Exemple image ici: http://i.stack.imgur.com/QvJTZ.png

J'ai écrit ce code:

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); 
} 

mais le résultat est tel que l'image "NO".

Quelqu'un peut-il expliquer?

Répondre

0

Conserver le canal alpha, puis le recopier.

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); 
} 

Fondamentalement, ce que vous faites: Vous avez un BitmapData ailleurs qui a la même taille que votre toile BitmapData, vous copiez canal alpha dans cette BitmapData, dessinez ce que vous voulez, puis copier le canal alpha arrière. Tout ce qui était transparent restait transparent. Notez que si vous ne voulez jamais que le canal alpha change, vous pouvez l'annuler une seule fois, puis restaurer.

+0

Merci beaucoup !!! –

Questions connexes