如何在Android中将捕获的图像压缩为特定大小?

时间:2012-10-27 05:33:27

标签: java android camera android-camera image-compression

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

数据包含 jpeg 中的图像, baos 包含 ByteArrayOutputStream 类型。

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的更好解决方案。

THANKYOU

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

baos.reset();