2012-07-14 29 views
3

我想在屏幕上繪製一些東西,然後將它複製到舞臺上的位圖上。AS3 Blitting - 獲取一些源圖像的複製像素

我已經完成了這個過程,像一個圓形的程序性繪製形狀,但是當我使用庫項目時,大多數源像素被切斷。

這裏是我的代碼 - 在另一個函數的位圖對象添加到舞臺上,我可以看到copyPixels工作,但正如我剛纔所說只複製一些像素。我曾嘗試玩過矩形,但目前爲止沒有運氣。

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

回答

6

使用星型資產:

star-asset

而且假設你是位圖傳輸到舞臺上的畫布位:

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

此實現將實例化StarAsset,繪製到BitmapData,然後隨機轉換繪製到畫布上的每個副本的比例,位置和旋轉:

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

主要生產:

stars

還是這裏1000明星們得出:

stars-1000

終於還是萬星被吸引:

stars-10000

+0

聖牛,你是一個有幫助的傢伙!我沒有使用矩陣,並會在今天完成我的工作時嘗試。非常感謝Jason。 – Servet 2012-07-15 14:28:42

+0

謝謝,非常有用..:),, – 2013-04-24 06:30:59