【问题标题】:Picked image bitmap return in a method在方法中返回拾取的图像位图
【发布时间】:2017-12-04 17:21:58
【问题描述】:

我是 Android 新手。我在选择图像和返回结果时遇到问题。我有一个方法是getImageFromGallery() 我的范围是这个方法调用然后我将从图库中选择一个图像并作为位图返回。但问题是onActivityResult() 在该位图返回后设置位图。如果我选择一个图像,则应返回该选定的图像位图文件。请帮助找出解决方案。

这是我的代码。

private Bitmap bitmap;

 public Bitmap getImageFromGallery(){
    Intent i = new Intent(
            Intent.ACTION_PICK,
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(i, RESULT_LOAD_IMAGE);
    return  bitmap;}


@Override
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();
        bitmap = BitmapFactory.decodeFile(picturePath);
    }

}

我想返回选定的位图值。

【问题讨论】:

  • “如果我选择一个图像,那么应该返回那个选择的图像位图文件”——这是不可能的。 startActivityForResult() 不是阻塞调用。如果您在onActivityResult() 中获得一张图片,您将需要调整您的应用程序逻辑以便能够使用该图片。
  • @CommonsWare 那么如何处理这个问题呢?我们可以保留返回直到图像设置为bitmap
  • "那该如何处理呢?" -- 正如我所写,如果您在onActivityResult() 中获得图像,您将需要调整您的应用程序逻辑以便能够使用该图像。您不能编写返回位图的方法。 “我们可以保留返回,直到图像设置为位图” - 不,抱歉。

标签: java android image android-studio bitmap


【解决方案1】:

试试这个:

public void getImageFromGallery(){
    Intent i = new Intent(Intent.ACTION_PICK);
    i.setType("image/*");
    startActivityForResult(i, RESULT_LOAD_IMAGE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK){
        Uri imageUri = intent.getData();
        mBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
    }
}

您的getImageFromGallery 无法返回位图,因为您尚未选择它。只能在onActivityResult中设置。

See more here.

【讨论】:

  • 在我的情况下,选择图像不是问题,我想等待返回设置所选图像后的位图。
  • 这正是这段代码的作用。只有当用户真正选择了它时,您才会得到图像。
  • 是的,在我的情况下用户也选择,但我的问题是方法在选择图像之前返回位图。
猜你喜欢
  • 2013-07-28
  • 1970-01-01
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多