Ошибка аргумента: ошибка № 2015: недопустимые данные BitmapData - PullRequest
3 голосов
/ 09 января 2010

У меня проблемы с загрузкой 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 ]

3 голосов
/ 31 января 2011

Flash Player 9 поддерживает только ширину и высоту 2880 пикселей.

1 голос
/ 15 июня 2010

также проверьте, не слишком ли велико ваше изображение. Я получил эту ошибку на изображениях, которые были больше, чем 3000 пикселей ...

0 голосов
/ 14 ноября 2014

Я решил с этим кодом:

    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);
    }   
0 голосов
/ 11 ноября 2014

Я просто хотел присоединиться и сказать, что получил эту ошибку для PNG-файла, который был усечен при асинхронной записи / прерванной загрузке.

Когда я позже загрузил PNG с Loader / URLRequest, загрузка успешно завершилась , свойство loader.content вернуло Bitmap, оно имело действительные width и height свойство, все выглядит корректно.

Но как только вы попытались получить доступ к данным пикселя (getPixel32, copyPixels или Texture.uploadFromBitmapData), он выдал:

ArgumentError: Error #2015: Invalid BitmapData.
0 голосов
/ 10 января 2010

Хорошо, теперь я исправил это. Если вы внимательно посмотрите на код, вы увидите, что для моего класса установлена ​​переменная Y 'w'

0 голосов
/ 09 января 2010

Попробуйте изменить свой 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!");
    }
}

Это должно позволить вам перехватить ошибку, прежде чем она произойдет. Следующий вопрос: ПОЧЕМУ ваше растровое изображение не анализируется нормально.

0 голосов
/ 09 января 2010

Я думаю, что вы хотите сослаться на загрузчик e.target, а не на LoaderInfo. Попробуйте отследить (loader.content) прямо перед строкой image = и посмотреть, говорит ли она, какой тип содержимого данных.

...