我使用以下方法从Android图库加载图片,但是如果我选择使用后置摄像头拍摄的图像(即大分辨率),它将无法加载到图像视图中。它会从前置摄像头加载较小的图像。
我猜测图像需要按比例缩小才能成功加载到图像视图中。
有没有人知道如何以编程方式缩小图像?
我已经注释了createScaledBitmap
代码行,因为我不确定如何实现它。
这是从图库中获取图像的完整方法:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
if(data != null){
ImageView imageView = (ImageView) findViewById(R.id.capturedDebriImageView);
imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
//imageView.setImageBitmap(Bitmap.createScaledBitmap(picturePath, 130, 110, false));
}
else if(data == null){
Toast.makeText(this, "Callout for image failed!",
Toast.LENGTH_LONG).show();
}
}
}
答案 0 :(得分:3)
实际上有更有效的方法:
BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
bitmapOptions.inSampleSize = (int) scaleFactor;
inputStream = getContentResolver().openInputStream(uri);
Bitmap scaledBitmap = BitmapFactory.decodeStream(inputStream, null, bitmapOptions);
这样你就可以避免"临时"位图对象,而是立即加载已经缩小的版本。
答案 1 :(得分:1)
您需要将图像加载到一个位图中,然后从第一个位图创建第二个缩小的位图:
Bitmap bmp = BitmapFactory.decodeFile(picturePath);
imageView.setImageBitmap(Bitmap.createScaledBitmap(bmp, 130, 110, false));
bmp.recycle();
此方法允许您将位图缩放到任意宽度和高度。如果您不需要它是一个确切的大小,那么根据另一个答案使用inSampleSize会更有效,但您只能按2的幂进行缩放。