如何在加载到imageview之前缩小位图图像?

时间:2014-12-31 22:24:00

标签: android image bitmap scale

我使用以下方法从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();

            }


        }
    }

2 个答案:

答案 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的幂进行缩放。