【发布时间】:2015-04-29 22:06:47
【问题描述】:
我正在尝试压缩保存在文件中的图像。我正在尝试将文件压缩为 1MB。我尝试了几种方法,但通常会产生 OutofMemoryError。 然后我尝试使用此解决方案,但它使位图空白。
How to compress bitmap from 10mb image from camera to 300kb beforw setting to imageview in android
这是我的代码:
System.gc();
getActivity().getContentResolver().notifyChange(mImageTempUri, null);
Bitmap bitmap;
bitmap = BitmapFactory.decodeFile(mImageDirectory + mImageName, options);
if(bitmap == null){
howRequestFailedErrorMessage("Gambar gagal di-upload");
return;
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 25, bytes);
File f = new File(mImageDirectory + mImageName);
if(f.exists()){
f.delete();
}
FileOutputStream fo;
try {
fo = new FileOutputStream(f);
fo.write(bytes.toByteArray());
fo.flush();
fo.close();
} catch (IOException e) {
e.printStackTrace();
}
bitmap.recycle();
【问题讨论】:
-
你试过直接把压缩数据放到fileOutputStream吗?您创建了两组 jpeg 图像数据,一组显式在 ByteArrayOutputStream 中,另一组临时在 bytes.toBytesArray 中。我猜这些数据可能会导致“内存不足”错误。您可以通过代码“bitmap.compress(Bitmap.CompressFormat.JPEG, 25, fo);”避免这些数据
-
@Fumu7 我不太明白,你能给出代码中的例子吗?实际上现在内存不足并不是真正的问题,主要问题是我无法动态压缩图像,我必须静态调整质量(现在是 25)
标签: android memory-management bitmap android-bitmap