ArgumentError:错误#2015:无效的BitmapData

时间:2010-01-09 15:13:05

标签: flash actionscript-3 actionscript flash-cs4

我在加载bitmapData时遇到问题。我收到以下错误

Engine Init //trace
loadimage//trace
ArgumentError: Error #2015: Invalid BitmapData.
    at flash.display::BitmapData()

以下是我的代码。它似乎发生在跟踪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);
         }
    }
}

我打电话的方法是这样的

balls = new Array();
            balls[0] = new gameObject();
            balls[0].loadImage("com/images/ball.gif", 15,15,0,0);

当我追踪Loader.content时,下面是显示

的内容
Engine Init
loadimage
[object Bitmap]
ArgumentError: Error #2015: Invalid BitmapData.
    at flash.display::BitmapData()

7 个答案:

答案 0 :(得分:3)

Flash Player 9仅支持2880像素的宽度和高度。

答案 1 :(得分:1)

还要检查您的图片是否太大。我在大于3000像素的图像上得到了这个错误......

答案 2 :(得分:0)

我想你想引用e.target的Loader,而不是LoaderInfo。尝试在image =行之前跟踪(loader.content)并查看它是否告诉您数据内容的类型。

答案 3 :(得分:0)

尝试将imageComplete()更改为:

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

这应该允许您在错误发生之前捕获它。接下来的问题是为什么你的位图没有被解析好。

答案 4 :(得分:0)

好的,现在我修好了。如果您仔细查看代码,您将看到为我的类设置属性Y变量'w'

答案 5 :(得分:0)

我只是想插入并说我因异步写入/中断上传而被截断的 PNG文件出现此错误。

当我稍后使用Loader / URLRequest 加载成功完成加载PNG时,loader.content属性返回了Bitmap,它有一个有效的widthheight属性,一切看起来都有效。

但是,只要您尝试访问像素数据(getPixel32copyPixelsTexture.uploadFromBitmapData),就会抛出:

ArgumentError: Error #2015: Invalid BitmapData.

答案 6 :(得分:0)

我用这段代码解决了:

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