2011-02-27 64 views
0

我有以下代碼:定位的BitmapData

public function Application() 
     { 
      loader = new Loader(); 
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); 
      var urlRequest:URLRequest = new URLRequest("image/1.jpg"); 
      loader.load(urlRequest); 
      addChild(loader); 
     } 
     private function completeHandler(e:Event):void{ 
      loader.content.width = 800; 
      loader.content.scaleY = loader.content.scaleX; 
      piece = Math.round(loader.height/10); 
      drawBitmaps(); 
     } 
     private function drawBitmaps():void{ 
      var bmdata:BitmapData = new BitmapData(loader.width, piece, true, 0x000000); 
      bmdata.draw(loader); 
      var bitmap:Bitmap = new Bitmap(bmdata); 
       addChild(bitmap); 
       loader.visible = false; 
     } 

結果是位圖至極包含該圖像的費用相加。高度是80.它從圖像的頂部開始。但我怎麼能告訴bitmapdata開始繪製圖像讓我們說80pixels?所以它繪製了圖像的中間部分?因爲atm它總是從圖像的頂部繪製。

回答

3

您應該使用BitmapData :: draw clipRect參數。 下面是一個例子:

package { 
    import flash.geom.Rectangle; 
    import flash.display.Bitmap; 
    import flash.display.BitmapData; 
    import flash.display.Graphics; 
    import flash.display.Sprite; 
    public class BitmapDataTest extends Sprite { 
    public function BitmapDataTest() { 
     var c:Sprite = new Sprite(); 
     var g:Graphics; 
     g = c.graphics; 
     g.beginFill(0xFF0000); 
     g.drawCircle(30,30,30); 
     g.endFill(); 
     addChild(c); 
     c.x = 10; 
     c.y = 10; 
     var bmdata:BitmapData = new BitmapData(60, 60, true, 0x000000); 
     bmdata.draw(c,null,null,null, new Rectangle(0,30,30,30)); 
     var bitmap:Bitmap = new Bitmap(bmdata); 
     addChild(bitmap); 
     bitmap.x = 80; 
     bitmap.y = 10; 
     } 
    } 
} 

請注意,目標位圖數據應具有相同的尺寸爲源或這是不行的。如果你真的需要削減它,你應該使用BitmapData :: copyPixels方法。

0

最簡單的方法是動態地應用遮罩。這裏有一個很好的例子:Actionscript 3 and dynamic masks

你可以創建一個矩形,你正在尋找的高度和適當的位置。

希望這會有所幫助。

+0

這不適合我,因爲我真的想要自己的作品。 – vincent 2011-02-27 09:58:45

+0

我不明白你說的是什麼? – TNC 2011-02-27 22:09:05