1

我正在使用我的 Android 相机拍摄图像,但相机是 8 MP,所以我得到大约 4-5 MB jpeg 图像。因此,我尝试使用以下代码将它们压缩到 1 MB。

data包含jpeg格式的图像,而baosByteArrayOutputStream类型。

while ( data.length > 1 * 1024  * 1024 )
{
    System.gc();
    Log.e(TAG,"Data size "+ (data.length/1024));
    bitmapData.compress(CompressFormat.JPEG, compressionRatio, baos);
    data = baos.toByteArray();
    Log.e(TAG,"Data size "+ (data.length/1024));
    compressionRatio -= 5 ;
}

它允许我捕获一些图像,但在几张照片之后,应用程序崩溃并显示错误日志Out of memory。任何人都可以提供一个更好的解决方案来压缩JPEG。

谢谢你

4

2 回答 2

0

您提供的解决方案的问题是位图正在分配所有内存。您需要做的就是将其添加到循环的末尾。

bitmapData.recycle();
System.gc();

这将位图标记为已死并准备好进行垃圾收集,并手动调用垃圾收集器。

于 2013-05-20T20:49:41.540 回答
0

老问题,但我希望这对某人有所帮助。将此代码添加到循环开始将重置 byteArrayOutputStream(baos):

baos.reset();
于 2015-12-05T21:13:04.533 回答