我正在我的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
答案 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或从塔到塔的情况。
如果您需要更多详细信息,请在此处注明。