我正在尝试以编程方式获取大尺寸图像,但是应用程序崩溃了。 这是我在做什么:
public static Bitmap getImageFromResult(Context context, int resultCode, Intent imageReturnedIntent) {
Bitmap bitmap = null;
File imageFile = getTempFile(context);
if (resultCode == Activity.RESULT_OK) {
Uri selectedImage;
boolean isCamera = (imageReturnedIntent == null || imageReturnedIntent.getData() == null || imageReturnedIntent.getData().toString().contains(imageFile.toString()));
if (isCamera) {
// From Camera
selectedImage = Uri.fromFile(imageFile);
} else {
// From Storage
selectedImage = imageReturnedIntent.getData();
}
//bitmap = getResizedImage(context, selectedImage);
bitmap = getResizedImage(context, selectedImage);
}
return bitmap;
}
还有resize
方法`:
//*********** Resize to avoid using too much Memory loading Big Images (2560*1920) ********//
private static Bitmap getResizedImage(Context context, Uri selectedImage) {
Bitmap resizedBitmap = null;
int[] sampleSizes = new int[]{8,7,6,5, 4, 3, 2, 1};
int i = 0;
do {
resizedBitmap = decodeBitmap(context, selectedImage, sampleSizes[i]);
i++;
} while (resizedBitmap.getWidth() < minWidthQuality && i < sampleSizes.length);
return resizedBitmap;
}
答案 0 :(得分:0)
尝试一下-您可以将位图的大小调整为其他高度/宽度
public static Bitmap getResizedBitmap(Bitmap bm, float newHeight, float newWidth) {
float width = bm.getWidth();
float height = bm.getHeight();
float scaleWidth = (newWidth) / width;
float scaleHeight = (newHeight) / height;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
return Bitmap.createBitmap(bm, 0, 0, (int) width, (int) height, matrix, false);
}
然后只需创建新的位图
Bitmap bitmap = BitmapFactory.decodeFile(pathname);
Bitmap newBitmap = getResizedBitmap(bitmap,400,320);
答案 1 :(得分:0)
如果您要从Internet上获取图像,那么显然您需要先下载图像,但是这会根据互联网速度而花费一些时间,或者您要从内存中加载图像,则可以应用此stack over answer 降低图像质量的方法