Java 降低图像质量。OutOfMemory异常-Android
我正在尝试实现一个应用程序,它在一个图像上执行许多操作。我有优化的问题。运行我的应用程序的时间太长。我需要压缩我正在处理的图像。我正在尝试使用本教程: 当我想从drawable文件夹中获取图像时,它工作得很好。问题是当我想从相机或画廊拍照时。我不知道应该在“Java 降低图像质量。OutOfMemory异常-Android,java,android,image-processing,bitmap,bitmapfactory,Java,Android,Image Processing,Bitmap,Bitmapfactory,我正在尝试实现一个应用程序,它在一个图像上执行许多操作。我有优化的问题。运行我的应用程序的时间太长。我需要压缩我正在处理的图像。我正在尝试使用本教程: 当我想从drawable文件夹中获取图像时,它工作得很好。问题是当我想从相机或画廊拍照时。我不知道应该在“R.id.myimage”中输入什么 所以问题是,如何使用这行代码: BitmapFactory.decodeResource(getResources(), R.id.myimage, options); 当我想使用相机或多媒体资料而不
R.id.myimage
”中输入什么
所以问题是,如何使用这行代码:
BitmapFactory.decodeResource(getResources(), R.id.myimage, options);
当我想使用相机或多媒体资料而不是可绘制文件夹时?为避免OOM错误,请使用以下方式缩放图像:
//For resource
image.setImageBitmap(decodeSampledBitmapFromResource("android.resource://com.my.package/drawable/image_name"));
//For file
image.setImageBitmap(decodeSampledBitmapFromResource(filepath));
采样功能:
public static int calculateInSampleSize(BitmapFactory.Options options,
int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 2;
if (height >= reqHeight || width >= reqWidth) {
inSampleSize *= 2;
}
return inSampleSize;
}
public static Bitmap decodeSampledBitmapFromResource(String file,
int reqWidth, int reqHeight) {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(file, options);
options.inSampleSize = calculateInSampleSize(options, reqWidth,
reqHeight);
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(file, options);
}