无法将图像从SD卡加载到画布

时间:2017-01-21 18:52:21

标签: android canvas android-bitmap

如何将图像从SD卡加载到画布。我尝试了这段代码但它无法正常工作。

Uri selectedImage = data.getData();
    if (selectedImage == null) {
        Log.e(getString(R.string.app_name), "selected image uri is null");
        return;
    }

    String[] filePath = { MediaStore.Images.Media.DATA };
    Cursor cursor = getActivity().getContentResolver().query(selectedImage, filePath, null, null, null);
    if(cursor==null){
        Log.e(getString(R.string.app_name), "image cursor is null");
        return;
    }
    cursor.moveToFirst();
    String imagePath = cursor.getString(cursor.getColumnIndex(filePath[0]));
    cursor.close();
    Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
    Bitmap bitmap2 = Bitmap.createBitmap(bitmap.getHeight(),bitmap.getWidth(),bitmap.getConfig());
    mCanvas.setBitmap(bitmap2);
    Paint p = new Paint();
    mCanvas.drawBitmap(bitmap,0,0,p);

此代码有什么问题?

1 个答案:

答案 0 :(得分:1)

我不知道Uri来自哪里。但是:

  • 摆脱所有MediaStore内容

  • 使用ContentResolveropenInputStream()获取InputStream

  • 标识的内容Uri
  • 使用BitmapFactory.decodeStream()从该流解码

此外:

  • 确保您请求READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE,包括处理运行时权限

  • 最后,将openInputStream()decodeStream()工作移至后台主题

  • 考虑切换到an image-loading library