是否有针对Flash或AIR的同步加载字节方法?

时间:2016-11-28 12:23:51

标签: javascript actionscript-3 flash air

Flash Player或AIR中是否还有同步 loadBytes()方法?

更多信息:
我正在尝试加载一个字节数组并将其同步转换为位图数据(非异步)。它不能是异步的。 PNG被编码为base64数据。

现在我将从base64解码为字节数组,然后尝试将该字节数组解码为位图数据。没有加载器就无法从字节数组转到位图数据,loader.loadBytes()是异步的。

我想我可以将字节数组传递给JavaScript,如果有一个类,但这是最后的手段。

仅供参考我正在运行AIR 23.

看起来有一个同步解码提到here,但它似乎不起作用。好吧,似乎我仍然需要添加事件监听器并等待一个框架:

enter image description here

让我再说一遍,它不能是异步的。我的问题是,如果可能的话。

这是我编码数据的示例代码。我正在使用此call

var base64ImageData:String = DisplayObjectUtils.getBase64ImageDataString(displayObject, DisplayObjectUtils.PNG, null, true);

我想在下一行解码它,但loadBytes()似乎不允许这样做。我正在使用此call

var bitmapData:BitmapData = DisplayObjectUtils.getBitmapDataFromBase64(bitmapDataString);

让我再说一遍,我正在寻找同步行动。它不能是异步的。我的问题是,如果可能的话。

2 个答案:

答案 0 :(得分:0)

正如reference所说:

  

complete:Event - 在操作完成时由contentLoaderInfo对象调度。始终在init事件之后调度complete事件。

因此,您可以执行Event.COMPLETE处理程序中的依赖代码。

答案 1 :(得分:0)

您正在寻找同步的BitmapData.setPixels()。对于源字节数组中的像素,您需要32位未经过相乘的ARGB值。考虑从测试图像打印BitmapData.getPixels()以查看应存储像素的方式。

  

将字节数组转换为像素数据的矩形区域。对于每个像素,调用ByteArray.readUnsignedInt()方法并将返回值写入像素。如果字节数组在写入完整矩形之前结束,则函数返回。字节数组中的数据预计为32位ARGB像素值。在读取像素之前或之后,不对字节阵列执行搜索。

更新: getBase64ImageDataString()使用BitmapData.encode()(适用于Flash播放器11.3及更高版本)或mx.graphics.codec.PNGEncoder/JPEGEncoder课程(来自Flex)将您的图片转换为PNG或JPG SDK)。然后它将生成的二进制数据编码为base64。

您可以与BitmapData.setPixels()同步使用的唯一格式是上面提到的格式:没有标题的纯行ARGB像素行。不允许使用PNG,JPG或其他格式。

当您使用Loader.loadBytes()时,它会完成所有繁重工作,解码文件标题,查找图像大小,颜色设置以及将数据转换为内部格式。如果您确实想要将序列化图像数据同步转换为BitmapData,则必须手动完成所有操作。解码base64字符串,获取ByteArray,然后使用第三方类将图像数据转换为ActionScript中的像素。至少可以说,这在绩效方面是次优的。解码器是easily found on the net,但无论如何我都认为这是一个坏主意。