我是用我的Android相机捕捉图像,但相机是8MP,所以我得到了大约4-5 MB的jpeg图像。因此,我尝试使用下面的代码将它们压缩到1MB。
ByteArrayOutputStream data包含jpeg和baos中的图像。
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
发布于 2013-05-20 20:49:41
您提供的解决方案的问题是位图正在分配所有内存。您需要做的是将其添加到循环的末尾。
bitmapData.recycle();
System.gc();
这会将位图标记为已死并准备好进行垃圾收集,并手动调用垃圾收集器。
发布于 2015-12-05 21:13:04
老问题,但我希望这有助于somebody.Adding这段代码启动循环将重置byteArrayOutputStream(baos):
baos.reset();
https://stackoverflow.com/questions/13097554
复制相似问题