将bytearray转换为bitmapdata时遇到EOF错误

时间:2010-03-18 11:48:44

标签: flex actionscript-3 bitmapimage

我正在使用

var bitmapdata:BitmapData=new BitmapData();
var pixels:Bytearray=new Bytearray();
pixels = rleDecodePixles();
bitmapdata.setPixels(bitmapdata.rect, pixels);

在上面代码的第4行中,我收到“错误:错误#2030:遇到文件结束。”我检查了 pixel 对象的长度,它是 rect 对象的 width * height 的4倍。鉴于 setPixels()函数从bytearray读取unsigned int并将该值设置为像素,我认为它应该可行。

但我不知道为什么这不起作用。在从服务器获得的数据的RLE解码之后填充像素对象。

是否有任何解决方法或我可以尝试使用的任何其他方法。加载器类不会工作,因为我从服务器获得的数据不是任何可识别的格式。

非常感谢任何帮助。

Shrikant

感谢。

2 个答案:

答案 0 :(得分:13)

当您尝试将其指针移动到可用的最后位置时,您会从ByteArray中获得EOF错误。填充ByteArray时,实际上是移动了它的指针,所以在你可以对它做任何事情之前,你必须重置它的位置。

尝试:

var bitmapdata:BitmapData=new BitmapData();
var pixels:Bytearray=new Bytearray();
pixels = rleDecodePixles();
pixels.position = 0; // Reset ByteArray pointer
bitmapdata.setPixels(bitmapdata.rect, pixels);

答案 1 :(得分:0)

此外,我发现以下代码有效:

bitmap.object.setPixels(bitmap.object.rect, bitmap.createPixels(width, height));

function creatPixels(width:int,height:int):Bytearray
{
   var result:Bytearray=new Bytearray();
    result.length=(width*height)<<2;
    return result;
}

但在我修改了bytearray然后尝试设置像素后,它会抛出上述错误。 现在更加困惑。