我正在尝试使用PNGEncoder将bitmapData对象编码成png ByteArray,这样我就可以将数据发送到服务器。一切都将是桃子,除了bitmapData是4000x4000px,当我在它上面运行PNGEncoder.encode函数时,整个应用程序在运行时会停止5-8秒(UI被阻塞)。有没有人有任何关于如何避免阻塞的建议,我读到过关于分块进程的文章(因为在AS3中你不能多线程),但是找不到任何关于分块进程的示例代码。
谢谢,山姆
发布于 2009-09-26 15:05:13
主要有两种方法可以做到这一点。
a)使用像素折弯器:您可以将工作卸载到像素折弯器(一种类似于as3中的阴影语言)。这具有在某些情况下使用gpu的优势,但它也是异步和非阻塞的(在另一个线程上运行)。但它确实需要播放器10+。我还没有见过像素折弯器png编码器,老实说,这可能是不可能的(我对png编码还不够熟悉),但它可能是一个选择。在性能方面,这是你能得到的最好的。更多信息here
b)使用分块。基本上,您可以重写编码器以编码块(行、列或较小的区域),并将其与enter frame事件挂钩,然后在编码器上调用每个帧,直到不再需要进行编码。Zeh有一个整洁的LWZ chunked encoder,其中包含源代码,可能会让您深入了解细节。
干杯,亚瑟
发布于 2009-09-26 17:31:18
除了Arthur的注释之外,您还可以用Alchemy的C/C++编写它,因为炼金术支持绿色线程。和PixelBender一样,炼金术也需要Flash10。
发布于 2011-11-14 03:06:38
又一个厚颜无耻的插头!
您可以使用我最近完成的闪存库(也需要PNGEncoder2 10+),它可以方便地支持巨大的图像。它做了适当的异步编码,最后没有一个压缩步骤。此外,它真的很快;-)
从GitHub (README)获取它,并在我的博客文章中查看与其他编码器进行比较的benchmark。
它对速度进行了高度调优,并使用炼金术操作码和domain memory来加快速度(感谢Haxe),因此它应该可以与使用炼金术编译的任何东西相媲美。
https://stackoverflow.com/questions/1480021
复制相似问题