Umar Ghaffar
Umar Ghaffar

Reputation: 131

Converting Bitmap into a valid Uri

I am developing an android app where user is selecting the image either from gallery or capture from camera. When user get the image from gallery i get the image uri then i pass this uri to other activity in string form. then in next activity i convert that string into uri and then uri into bitmap and set the image bitmap in imageview. Now when i capture the image from camera i get the image bitmap. Now i want to convert this bitmap into valid uri and pass to next 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);

}

This is how i get the uri in next activity

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

and then convert the uri into bitmap like this

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

My main goal is to convert the bitmap into uri

Upvotes: 1

Views: 8187

Answers (3)

NyP
NyP

Reputation: 519

Try this:

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

Upvotes: -3

Dominik Wuttke
Dominik Wuttke

Reputation: 555

You write your Bitmap into the local Cache of the Application and retrieve it from there.

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

Now you can send the URI to another Activity as a String and retrieve the URI from the String and get the Bitmap from the URI.

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

Upvotes: 7

Ashish
Ashish

Reputation: 6919

Provide the path of image it will provide you image uri

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

Use the following function so you will get image

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

Upvotes: 1

Related Questions