как получить данные изображения из выбранного изображения в галерее?

#android #image-processing #gallery #android-intent

#Android #обработка изображений #Галерея #android-намерение

Вопрос:

у меня есть следующий код, в котором перечислены все файлы jpeg в галерее телефона. Это работает нормально, но когда я выбираю изображение, я хотел бы запустить намерение для операции обработки изображения с данными выбранного изображения. Есть идеи?

заранее спасибо, Мэтт

 Button useGallery = (Button)findViewById(R.id.loadfromgallery);
        useGallery.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
                photoPickerIntent.setType("image/*");
                startActivityForResult(photoPickerIntent, SELECT_PHOTO); 
            }}) ;



    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
        super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

        switch(requestCode) { 
        case SELECT_PHOTO:
            if(resultCode == RESULT_OK){  
                Uri selectedImage = imageReturnedIntent.getData();
                InputStream imageStream = null;
                try {
                    imageStream = getContentResolver().openInputStream(selectedImage);
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);


                if(yourSelectedImage != null){
                Log.e(TAG,"pic ok");
                }else{
                     Log.e(TAG,"pic not ok");
                }
            }
        }
    }
  

Комментарии:

1. Способ обработки этого зависит от приложения, которому вы передаете данные. Если приложение ожидает URI для растрового изображения, вам придется передать это как дополнительное в вашем намерении. В противном случае вы можете передать растровое изображение (найдите, как это сделать), однако я бы не советовал этого делать, поскольку вы отправляете много данных.

Ответ №1:

Я сделал это так 🙂

 protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
            super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

            switch(requestCode) { 
            case SELECT_PHOTO:
                if(resultCode == RESULT_OK){  
                    Uri selectedImage = imageReturnedIntent.getData();
                    InputStream imageStream = null;
                    try {
                        imageStream = getContentResolver().openInputStream(selectedImage);
                    } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);
                    Intent intent = new Intent(mContext, DisplayUndistortedBitmapFromGalleryActivity.class);
                    intent.setData(selectedImage);
                    startActivity(intent);

                    if(yourSelectedImage != null){
                    Log.e(TAG,"pic ok");
                    }else{
                         Log.e(TAG,"pic not ok");
                    }
                }
            }
  

.

 public class DisplayUndistortedBitmapFromGalleryActivity extends Activity {

    private static final String TAG = "*********DUBFGActivity";
    private Context mContext = this;
    Uri uri;
    private Bitmap mbitmap = null;

    @Override 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);


         uri = getIntent().getData();
        if(uri != null){
            Log.e(TAG, "uri ok");
        }else {
            Log.e(TAG, "uri not ok");
        }


        try {
              mbitmap = Media.getBitmap(getContentResolver(), uri);
             //setMbitmap(bitmap);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        if(mbitmap == null){
            Log.e(TAG,"mbitmap is null");
        }else{
            Log.e(TAG,"mbitmap is not null");
        }