2012-07-14 1 views
3

J'essaye de dessiner quelque chose sur l'écran puis de le copier sur un bitmap qui est sur scène.AS3 Blitting - Copier des pixels en obtenant une partie de l'image source

Je l'ai fait auparavant, avec une forme procédurale dessinée comme un cercle, mais quand j'utilise un élément de bibliothèque, la plupart des pixels source sont coupés.

Voici mon code - dans une autre fonction, l'objet bitmap est ajouté à la scène et je peux voir que copyPixels fonctionne mais, comme je l'ai dit, ne copie que certains des pixels. J'ai essayé de jouer avec le Rectangle mais pas de chance jusqu'à présent.

var s:StarAsset = new StarAsset(); 

     s.x = e.stageX; 
     s.y = e.stageY; 
     s.scaleX = e.pressure * 10; 
     s.scaleY = e.pressure * 10; 
     s.rotation = Math.random() * 360; 



     var bms:BitmapData = new BitmapData(s.width + 6, s.height + 6, true, 0x00000000); 
     bms.draw(s); 

     var srect:Rectangle = new Rectangle(); 
     srect.width = s.width + 6; 
     srect.height = s.height + 6; 

     var destpoint:Point = new Point(s.x, s.y); 
     bmcontainer.copyPixels(bms, srect, destpoint, null, null, true); 

Répondre

6

L'utilisation d'un actif étoiles:

star-asset

Et en supposant que vous êtes blitting à un bitmap de toile sur la scène:

var canvas:BitmapData = new BitmapData(600, 600, true, 0x0); 
var bitmap:Bitmap = new Bitmap(canvas, PixelSnapping.AUTO, true); 
addChild(bitmap); 

Cette mise en œuvre instancierez votre StarAsset, dessiner à BitmapData, puis transformer au hasard l'échelle, la position et la rotation par copie dessinée sur le canevas:

makeStars(); 

function makeStars():void 
{ 
    // get the star asset 
    var s:StarAsset = new StarAsset(); 

    // copy star asset to bitmap data 
    var bd:BitmapData = new BitmapData(s.width, s.height, true, 0x0); 
    bd.draw(s); 

    // draw 100 variants on BitmapData 
    for(var i:uint = 0; i < 100; i++) 
    { 
     var positionX:Number = Math.random() * 600; 
     var positionY:Number = Math.random() * 600; 
     var scale:Number = Math.random(); 
     var angle:Number = Math.random() * 360; 

     var matrix:Matrix = new Matrix(); 
     matrix.scale(scale, scale); 
     matrix.rotate(angle * Math.PI/180); 
     matrix.translate(positionX, positionY); 

     canvas.draw(bd, matrix, null, null, null, true); 
    } 
} 

qui produit:

stars

Ou ici 1000 étoiles sont dessinées:

stars-1000

Ou enfin 10.000 étoiles sont dessinées:

stars-10000

+0

Holy cow, vous êtes un gars utile! Je n'ai pas utilisé de matrices et j'essaierai quand j'en aurai fini avec mon travail aujourd'hui. Merci beaucoup Jason. – Servet

+0

Merci, si utile ..:) ,, –