vincent
vincent

Reputation: 3

positioning bitmapdata

I have the following code:

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

the result is a bitmap wich contains a pice of the image. The height is 80. and it starts at the top of the image. But how can i tell the bitmapdata to start drawing the image from lets say 80pixels? so it draws a middle piece of the image? Because atm it allways draws from the top of the image.

Upvotes: 0

Views: 2734

Answers (2)

Nek
Nek

Reputation: 1944

You should use BitmapData::draw clipRect parameter. Here is an example:

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

Please notice that the target bitmap data should have the same dimensions as source or this won't work. If you really have to cut it down you should use BitmapData::copyPixels method.

Upvotes: 3

TNC
TNC

Reputation: 5386

The easiest way would be to apply a mask, dynamically. Here is a good example: Actionscript 3 and dynamic masks

You can create a rectangle, the height you're looking for and position it appropriately.

Hope this helps.

Upvotes: 0

Related Questions