2010-01-09 63 views
3

加載bitmapData時出現問題。我收到以下錯誤ArgumentError:錯誤#2015:無效的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() 

回答

0

我想你想引用e.target的Loader,而不是LoaderInfo。嘗試在image = line之前跟蹤(loader.content),看它是否告訴你什麼類型的數據內容。

+0

我想,和它說我不能將LoaderInfo轉換爲Loader(),所以當我跟蹤loader.content時,LoaderInfo也是正確的,我得到了 ... [對象位圖],這意味着位圖對象在其中。 – numerical25 2010-01-09 17:20:11

+0

奇怪的是,它工作正常,如果我硬編碼canvasData的寬度和高度。但如果我使用varibles,它並不 – numerical25 2010-01-10 03:24:58

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

這應該讓你捕獲錯誤發生之前。接下來的問題是爲什麼你的位圖沒有解析好。

+0

嘿,我追溯loader.content,它顯示[對象位圖] – numerical25 2010-01-09 17:20:51

0

好的,現在我修好了。如果你仔細看看代碼,你會看到屬性Y被設置爲我的類變量'w'

1

也檢查你的圖像是否不太大。我在圖像上得到了大於3000像素的圖像錯誤...

3

Flash Player 9僅支持2880像素的寬度和高度。

+0

是否有任何官方說明關於此? – jayarjo 2011-02-03 07:20:46

+2

是的。 http://kb2.adobe.com/cps/496/cpsid_49662.html – shanethehat 2011-07-20 08:34:46

0

我只是想插話說我得到了一個PNG文件的錯誤,該文件被異步寫入/斷開上傳截斷了

當我後來裝的PNG有Loader/URLRequest負載成功完成,則loader.content屬性返回一個Bitmap,它有一個有效的widthheight財產,一切看起來都有效。

但是,只要您試圖訪問的像素數據(getPixel32copyPixels,或Texture.uploadFromBitmapData),把它扔到:

ArgumentError: Error #2015: Invalid BitmapData. 
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); 
    }