无法将图像从 SD 卡加载到 canvas

Unable to load image from sdcard to canvas

如何从 SD 卡加载图像到 canvas。我试过这段代码,但它不起作用。

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);

这段代码有什么问题?

我不知道这个 Uri 来自哪里。然而:

  • 摆脱所有 MediaStore 东西

  • 使用 ContentResolveropenInputStream() 得到 InputStreamUri

    [=46= 标识的内容]
  • 使用BitmapFactory.decodeStream()从该流解码

还有:

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

  • 最终,将 openInputStream()decodeStream() 工作移至后台线程

  • 考虑改用 an image-loading library