我创建了一个小应用程序,可以处理来自画廊或相机的图像。
一切正常,但是。在具有小屏幕和小内存大小的设备(HTC Desire)上,我从其他手机下载了一些完整尺寸的图像,它们要大得多(该手机上的 8MP 摄像头)。
如果我尝试加载它,对于我的小型相机巨大的图像,它会立即崩溃。
那么,如何实施某种检查并缩小该图像的大小,但仍能正确加载它?
我确实在加载图像后缩小图像,但这是应该在崩溃出现之前完成的事情。
肿瘤坏死因子。
InputStream in = null;
try {
in = getContentResolver().openInputStream(data.getData());
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// get picture size.
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(in, null, options);
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
// resize the picture for memory.
int screenH = getResources().getDisplayMetrics().heightPixels; //800
int screenW = getResources().getDisplayMetrics().widthPixels; //480
int width = options.outWidth / screenW;
int height = options.outHeight / screenH;
Log.w("Screen Width", Integer.toString(width));
Log.w("Screen Height", Integer.toString(height));
int sampleSize = Math.max(width, height);
options.inSampleSize = sampleSize;
options.inJustDecodeBounds = false;
try {
in = getContentResolver().openInputStream(data.getData());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// convert to bitmap with declared size.
Globals.INSTANCE.imageBmp = BitmapFactory.decodeStream(in, null, options);
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}