ArgumentError: Error #2015: Invalid BitmapData
I am having problems loading a bitmapData. I am getting the following error
Engine Init //trace
loadimage//trace
ArgumentError: Error #2015: Invalid BitmapData.
at flash.display::BitmapData()
Below is my code. it appears it happens after the trace loadimage
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 w:Number;
protected var h:Number;
protected var image:BitmapData;
protected var canvas:Bitmap;
protected var px:Number;
protected var py:Number;
public function gameObject():void
{
init();
}
private function init():void
{
}
开发者_高级运维
public function loadImage(imageDir:String, w:Number, h:Number, px:Number, py:Number):void
{
this.w = w;
this.y = y;
this.px = px;
this.py = py;
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;
drawImage();
}
private function drawImage():void
{
var tilePoint:Point = new Point(0,0);
var tileRect = new Rectangle(py,px,w,h);
trace(loader.content);
var canvasData:BitmapData = new BitmapData(w,h);
trace("got canvas data");
canvasData.copyPixels(image,tileRect,tilePoint);
trace("copied pixels");
canvas = new Bitmap(canvasData);
}
}
}
And my call the the method is like so
balls = new Array();
balls[0] = new gameObject();
balls[0].loadImage("com/images/ball.gif", 15,15,0,0);
When I trace the Loader.content, below is what shows
Engine Init
loadimage
[object Bitmap]
ArgumentError: Error #2015: Invalid BitmapData.
at flash.display::BitmapData()
Flash Player 9 only support 2880 px width and height.
also check if your image isn't too large. I got this error on images which were bigger then 3000 pixels ...
I think you want to reference the Loader of the e.target, not the LoaderInfo. Try to trace(loader.content) right before your image= line and see if it tells you what type of data content is.
Try changing your imageComplete() into this:
private function imageComplete(e:Event):void {
var loader:LoaderInfo = LoaderInfo(e.target);
var bitmap:Bitmap = loader.content as Bitmap;
if(bitmap){
image = bitmap.bitmapData;
drawImage();
} else {
trace("invalid data!");
}
}
That should allow you to catch the error before it happens. The next question is WHY your bitmap isn't parsed okay.
Ok , now I fixed it. If you take a good look at the code, you will see the property Y being set for my class varible 'w'
I just wanted to chime in and say that I got this error for a PNG file that had been truncated by an asynchronous write / broken upload.
When I later loaded the PNG with a Loader
/ URLRequest
the load completed successfully, the loader.content
property returned a Bitmap
, it had a valid width
and height
property, everything looks valid.
But as soon as you tried to access the pixel data (getPixel32
, copyPixels
, or Texture.uploadFromBitmapData
), it threw:
ArgumentError: Error #2015: Invalid BitmapData.
I solved with this code:
if (myMC.width > 1&& myMC.height>1 && myMC.width<3000&& myMC.height<3000){
bitmapData = new BitmapData(myMC.width,myMC.height,true,1);
} else{
bitmapData = new BitmapData(500,500,true,1);
}
精彩评论