3

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

我需要将字节数组上传到我的服务器,但我用来将位图数据转换为 a 的函数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? 有没有更好的办法?

4

5 回答 5

1

使用 BitmapData.encode(),它在移动设备上的速度要快几个数量级http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#encode%28%29

于 2013-10-12T07:24:35.670 回答
1

尝试使用血腥图书馆: http: //www.blooddy.by。但我没有在移动设备上测试它。评论如果你会成功。

于 2013-02-22T08:26:53.683 回答
0

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

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

其中 bmp 是我的位图数据。编码耗时不到 3 秒,并且很容易同步融入我的控制流程。我尝试了异步方法,但它们最终花费了很长时间,并且很难跟踪用户何时从手机服务移动到 wifi 或在上传过程中从塔到塔。

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

于 2013-04-23T20:01:46.780 回答
0

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

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

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

于 2013-02-21T19:31:55.530 回答
0

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

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

我不确定本机性能,性能绝对取决于您拥有的图像类型。

于 2013-02-21T23:41:20.133 回答