I am trying to copy the pixels of a bitmap data. but I keep getting the following error
Parameter sourceBitmapData must be non-null.
it happens in the method drawImage. exact after my trace that says “got canvas data”.
canvasData.copyPixels(image,tileRect,tilePoint);
Below is my code
package com.objects {
import flash.display.Sprite;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.net.*;
import flash.events.*;
import flash.display.LoaderInfo;
public class gameObject extends Sprite {
protected var goWidth:Number;
protected var goHeight:Number;
protected var image:BitmapData;
protected var canvas:Bitmap;
public function gameObject():void
{
init();
}
private function init():void
{
}
public function loadImage(imageDir:String):void
{
trace("loadimage");
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,imageComplete);
loader.load(new URLRequest(imageDir));
}
private function imageComplete(e:Event):void {
var loader:LoaderInfo = LoaderInfo(e.target);
image = Bitmap(loader.content).bitmapData;
trace("imagecomplete");
}
public function drawImage(xPoint:Number = 0, yPoint:Number = 0, tWidth:Number = 0, tHeight:Number = 0):void
{
var tilePoint:Point = new Point(0,0);
var tileRect = new Rectangle(xPoint,yPoint,tWidth,tHeight);
var canvasData:BitmapData = new BitmapData(tWidth,tHeight);
trace("got canvas data");
canvasData.copyPixels(image,tileRect,tilePoint);
trace("copied pixels");
canvas = new Bitmap(canvasData);
}
}
}
and below is what I use to call the class
balls = new Array();
balls[0] = new gameObject();
balls[0].loadImage("com/images/ball.gif");
balls[0].drawImage(0,0,15,15);
Anyone have a clue ??
Error occurs because the
imagevariable (the first parameter tocopyPixels) is null.The
imagevariable ofGameObjectis populated in theimageCompletemethod that is called only when the loading is completed.loader.load()is asynchronous and returns before the image is fully loaded. You are callingdrawImage() as soon asloadImagereturns and henceimagewould be null at this time. Dispatch acompleteevent from theimageCompletemethod and wait for it before you calldrawImage.