我在加载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 :(得分: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
,它有一个有效的width
和height
属性,一切看起来都有效。
但是,只要您尝试访问像素数据(getPixel32
,copyPixels
或Texture.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);
}