我正在使用我的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
答案 0 :(得分:0)
您提供的解决方案的问题是位图正在分配所有内存。您需要做的是将其添加到循环的末尾。
bitmapData.recycle();
System.gc();
这会将位图标记为已死并准备好进行垃圾回收,并手动调用垃圾收集器。
答案 1 :(得分:0)
老问题,但我希望这有助于某人。将此代码添加到循环开始将重置byteArrayOutputStream(baos):
baos.reset();