Actionscript 3 ByteArray到位图数据AS3

Actionscript 3 ByteArray到位图数据AS3,actionscript-3,bytearray,bitmapdata,Actionscript 3,Bytearray,Bitmapdata,我正在使用com.adobe.images.PNGEncoder将位图数据编码为byteArray。有没有办法不使用加载器将byteArray转换回bitmapData?谢谢 编辑:我不想使用加载器的原因是它是异步的,我不想实现eventlisteners。下面使用的是加载器类,但它是同步的 var loader:Loader = new Loader(); loader.loadBytes(byteArray); bmpData.draw(loader); 编辑:尽管loadBytes也是异

我正在使用com.adobe.images.PNGEncoder将位图数据编码为byteArray。有没有办法不使用加载器将byteArray转换回bitmapData?谢谢


编辑:我不想使用加载器的原因是它是异步的,我不想实现eventlisteners。

下面使用的是加载器类,但它是同步的

var loader:Loader = new Loader();
loader.loadBytes(byteArray);
bmpData.draw(loader);
编辑:尽管loadBytes也是异步的,文档中说您需要等待init事件。不需要事件侦听器的原因是什么?在AS3中,它们是一种非常常见的做法

所以你需要这样的东西:

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, function(e:Event):void {
   bmpData.draw(loader);    
});
loader.loadBytes(byteArray);

看看bitmapdata的setpixels()方法。它需要一个矩形来定义大小,需要一个bytearray作为内容。这个方法很有趣。你能解释一下为什么它是同步的吗?我猜draw()方法会等待加载程序完成加载吗?请参阅我的编辑结果,它不是同步的,因此您必须仍然使用init事件处理程序。我将编辑答案。哦。你看,我有一个循环,它应该包含.loadBytes()方法,它将迭代10次或更多次。循环中也需要生成位图数据。这让我想知道如何使用事件监听器来实现它。在这种情况下,您将把代码封装在函数的循环中。这将确保事件侦听器中使用的bmpdata是正确的。这是我最后的选择:)图像解码仍然需要加载程序,除非您编写自定义解码器(解码速度比本地解码器慢)。如果您不使用图像编码器(即:保存byteArray),这是一个完美的解决方案“按原样”添加到文件)