Преобразование растрового изображения в действительный Uri - PullRequest
0 голосов
/ 09 января 2020

Я занимаюсь разработкой приложения 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

Ответы [ 3 ]

2 голосов
/ 09 января 2020

Вы записываете свое растровое изображение в локальный кэш приложения и извлекаете его оттуда.

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);
1 голос
/ 09 января 2020

Попробуйте это:

bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
imageView.setImageBitmap(bitmap);
1 голос
/ 09 января 2020

Укажите путь к изображению, которое вам предоставит image 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;
}
...