繁体   English   中英

将位图转换为有效的 Uri

[英]Converting Bitmap into a valid Uri

我正在开发一个 android 应用程序,用户可以在其中从图库中选择图像或从相机中捕获图像。 当用户从图库中获取图像时,我得到图像 uri,然后我将此 uri 以字符串形式传递给其他活动。 然后在下一个活动中,我将该字符串转换为 uri,然后将 uri 转换为位图并在 imageview 中设置图像位图。 现在,当我从相机捕获图像时,我会得到图像位图。 现在我想将此位图转换为有效的 uri 并传递给下一个活动

    if(requestCode==GET_FROM_GALLERY && resultCode == Activity.RESULT_OK) {
            Uri selectedImage = data.getData();
            System.out.println("URLLL "+selectedImage);
            Log.v("PhotoActivity", "Captured image");

            //Create intent
            Intent intent = new Intent(MainActivity.this, FlagDisplayActivity.class);
            intent.putExtra("URI", selectedImage.toString());
            //Start Flag Display activity
            startActivity(intent);
            Log.v("PHOTO ACTIVITY", " uri: " + selectedImage);
        }
        if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK)
        {

            Bitmap photo = (Bitmap) data.getExtras().get("data");

            Intent intent = new Intent(MainActivity.this, FlagDisplayActivity.class);
            intent.putExtra("URI", photo);
            //Start Flag Display activity
            startActivity(intent);

}

这就是我在下一个活动中获取 uri 的方式

  String imageUriString=getIntent().getStringExtra("URI");
        final Uri selectedImage=Uri.parse(imageUriString);

然后像这样将uri转换为位图

Bitmap bitmap = null;
    try {
        bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),
                selectedImage);
    } catch (IOException e) {
        e.printStackTrace();
        bitmap=StringToBitMap(imageUriString);
    }

我的主要目标是将位图转换为 uri

您将位图写入应用程序的本地缓存并从那里检索它。

Bitmap photo = (Bitmap) data.getExtras().get("data");// Get the Bitmap


  val file = File(context.cacheDir,"CUSTOM NAME") //Get Access to a local file. 
  file.delete() // Delete the File, just in Case, that there was still another File
  file.createNewFile() 
  val fileOutputStream = file.outputStream()
  val byteArrayOutputStream = ByteArrayOutputStream()
  photo.compress(Bitmap.CompressFormat.PNG,100,byteArrayOutputStream)
  val bytearray = byteArrayOutputStream.toByteArray()
  fileOutputStream.write(bytearray)
  fileOutputStream.flush()
  fileOutputStream.close()
  byteArrayOutputStream.close()

  val URI = file.toURI()

现在,您可以将 URI 作为字符串发送到另一个活动,并从字符串中检索 URI 并从 URI 中获取位图。

Intent intent = new Intent(MainActivity.this, FlagDisplayActivity.class);
        intent.putExtra("URI", URI.toString());
        //Start Flag Display activity
        startActivity(intent);

提供图像的路径,它将为您提供图像 uri

Uri selectedImageURI = data.getData();
File imageFile = new File(getRealPathFromURI(selectedImageURI));
Uri yourUri = Uri.fromFile(f);

使用以下功能,您将获得图像

private String getRealPathFromURI(Uri contentURI) {
    String result;
    Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
    if (cursor == null) { // Source is Dropbox or other similar local file path
        result = contentURI.getPath();
    } else { 
        cursor.moveToFirst(); 
        int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
        result = cursor.getString(idx);
        cursor.close();
    }
    return result;
}

尝试这个:

bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
imageView.setImageBitmap(bitmap);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM