JPEG编码器超慢,如何优化呢?

时间:2013-02-21 18:43:22

标签: iphone ios actionscript-3 flash-builder image-conversion

我正在我的Flash构建器中构建一个带有actionscript 3.0的应用程序。这是一个后续问题this question

我需要将bytearray上传到我的服务器,但是我用来将bitmapdata转换为ByteArray的函数速度非常慢,因此它会冻结我的移动设备。我的代码如下:

var jpgenc:JPEGEncoder = new JPEGEncoder(50);
trace('encode');
//encode the bitmapdata object and keep the encoded ByteArray

    var imgByteArray:ByteArray = jpgenc.encode(bitmap);
temp2 = File.applicationStorageDirectory.resolvePath("snapshot.jpg");
    var fs:FileStream = new FileStream();
    trace('fs');
    try{     
     //open file in write mode     
     fs.open(temp2,FileMode.WRITE);
          //write bytes from the byte array

     fs.writeBytes(imgByteArray);
          //close the file

     fs.close();
         }catch(e:Error){

有没有不同的方法将其转换为byteArray?有没有更好的办法?谢谢你提前!

〜MYY

5 个答案:

答案 0 :(得分:1)

尝试使用血库:http://www.blooddy.by。但我没有在移动设备上测试它。评论你是否会成功。

答案 1 :(得分:1)

使用BitmapData.encode(),移动http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#encode%28%29

的速度提高了几个数量级

答案 2 :(得分:0)

您应该尝试找到能够异步编码的JPEG编码器。这样,在压缩图像时仍可以使用该应用程序。我没有尝试任何库,但这个看起来很有希望:

http://segfaultlabs.com/devlogs/alchemy-asynchronous-jpeg-encoding-2

它使用Alchemy,它应该比as3corelib的JPEGEncoder更快(我想这是你目前正在使用的那个。)

答案 3 :(得分:0)

原生JPEG编码器是理想的,异步会很好,但可能仍然很慢(只是没有阻塞)。另一种选择:

var pixels:ByteArray = bitmapData.getPixels(bitmapData.rect);
pixels.compress();

我不确定原生表现,而且表现肯定取决于你有什么样的图像。

答案 4 :(得分:0)

伊利亚的答案就是为我做了什么。我下载了库,有一个如何在里面使用它的例子。我一直在努力让flashbuilder中的CameraUI拍照,对其进行编码/压缩,然后通过Web服务将其发送到我的服务器(数据作为压缩字节数组发送)。我这样做了:

by.blooddy.crypto.image.JPEGEncoder.encode(bmp,30);

bmp是我的位图数据。编码花了3秒钟,很容易同步适应我的控制流程。我尝试了异步方法,但最终耗费了很长时间,很难跟踪用户在上传过程中从用户服务移动到wifi或从塔到塔的情况。

如果您需要更多详细信息,请在此处注明。