将位图转换为有效的 Uri

Converting Bitmap into a valid Uri

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

    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 的方式 activity

  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

提供图片路径,它将为您提供图片 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);

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

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 作为字符串发送到另一个 Activity,然后从字符串中检索 URI,并从 URI 中获取位图。

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