【问题标题】:Selecting image from a gallery app从图库应用程序中选择图像
【发布时间】:2016-01-19 23:45:14
【问题描述】:

我使用此代码允许用户从图库应用中选择图像,然后再获取该图像。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == getActivity().RESULT_OK) {
            if (requestCode == REQUEST_CAMERA) {
                Bitmap photo = (Bitmap) data.getExtras().get("data");
                mImg.setImageBitmap(photo);
            } else if (requestCode == SELECT_FILE) {
                Uri selectedImageUri = data.getData();
                String[] projection = {MediaStore.MediaColumns.DATA};
                CursorLoader cursorLoader = new CursorLoader(getActivity(), selectedImageUri, projection, null, null,
                        null);
                Cursor cursor = cursorLoader.loadInBackground();
                int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
                cursor.moveToFirst();

                String selectedImagePath = cursor.getString(column_index);

                Bitmap bm;
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inJustDecodeBounds = true;
                BitmapFactory.decodeFile(selectedImagePath, options);
                final int REQUIRED_SIZE = 200;
                int scale = 1;
                while (options.outWidth / scale / 2 >= REQUIRED_SIZE
                        && options.outHeight / scale / 2 >= REQUIRED_SIZE)
                    scale *= 2;
                options.inSampleSize = scale;
                options.inJustDecodeBounds = false;
                bm = BitmapFactory.decodeFile(selectedImagePath, options);

                mImg.setImageBitmap(bm);
                mImg.setAlpha(1);

            }
    }
}

但在这个答案here 中,有人告诉我这段代码在大多数安卓设备上都不起作用。我能知道为什么吗?以及获取用户选择的图像的最佳方式是什么。

我将其发布在一个单独的问题中,因为它可能很有趣。

【问题讨论】:

标签: android android-intent


【解决方案1】:

使用bitmap,您的图像可能看起来很模糊。如果图像尺寸太大,当您想将它们上传或检索到(从)服务器时会出现问题。所以uribitmap 好。

你可以试试下面的代码,你会看到bitmapuri之间的区别

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case RESULT_LOAD_IMAGE:
                if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK & null != data) {
                    selectedImage = data.getData();
                    imageView.setImageURI(selectedImage);
                }
                else
                {
                    imageView.setImageResource(R.mipmap.no_image);
                }

                break;

            case REQUEST_IMAGE_CAPTURE:
                if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
                    try {
                        selectedImage = imageUri;
                        getContentResolver().notifyChange(selectedImage, null);
                        imageView.setImageURI(null);
                        imageView.setImageURI(imageUri);
                    } catch (Exception e) {
                        Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT)
                                .show();
                        Log.e("Camera", e.toString());
                    }
                    Log.e("A", "AAA");
                }
        }
    }

【讨论】:

  • 谢谢。这行是否代表imageUri Uri selectedImageUri = data.getData();
  • 代码在某些设备上显示“加载失败”Toast,可能是什么问题?
  • 你在哪里添加吐司?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多