wake-up-neo.net

Wie kann ich ein Bild in Android auswählen und ausschneiden?

Hey, ich arbeite gerade an einem Live-Wallpaper und erlaube dem Benutzer, ein Bild auszuwählen, das hinter meinen Effekten bleibt. 

Zur Zeit habe ich:

Intent i = new Intent(Intent.ACTION_PICK, Android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            i.putExtra("crop", "true");
            startActivityForResult(i, 1);

Und etwas darunter:

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      if (requestCode == 1)
        if (resultCode == Activity.RESULT_OK) {
          Uri selectedImage = data.getData();
          Log.d("IMAGE SEL", "" + selectedImage);
          // TODO Do something with the select image URI
          SharedPreferences customSharedPreference = getSharedPreferences("imagePref", Activity.MODE_PRIVATE);
          SharedPreferences.Editor editor = customSharedPreference.edit();
          Log.d("HO", "" + selectedImage);
          editor.putString("imagePref", getRealPathFromURI(selectedImage));
          Log.d("IMAGE SEL", getRealPathFromURI(selectedImage));
          editor.commit();
        } 
    }

Wenn mein Code ausgeführt wird, teilt Logcat mit, dass selectedImage null ist. Wenn ich das auskommentiere 

i.putExtra("crop", "true"):

Logcat gibt mir keine Nullzeiger-Ausnahme und ich kann mit dem Bild machen, was ich will. Also, was ist das Problem hier? Hat jemand eine Idee, wie ich das beheben kann? Vielen Dank für Ihre Zeit.

28
user253055

Ich habe auch dieses Problem angetroffen. Sie können mit diesem Code versuchen. Es funktioniert gut für mich

private static final String TEMP_PHOTO_FILE = "temporary_holder.jpg";  

Intent photoPickerIntent = new Intent(Intent.ACTION_PICK,
        Android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
photoPickerIntent.setType("image/*");
photoPickerIntent.putExtra("crop", "true");
photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri());
photoPickerIntent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(photoPickerIntent, REQ_CODE_PICK_IMAGE);

private Uri getTempUri() {
    return Uri.fromFile(getTempFile());
}

private File getTempFile() {

    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {

        File file = new File(Environment.getExternalStorageDirectory(),TEMP_PHOTO_FILE);
        try {
            file.createNewFile();
        } catch (IOException e) {}

        return file;
    } else {

        return null;
    }
}

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

    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

    switch (requestCode) {
        case REQ_CODE_PICK_IMAGE:
            if (resultCode == RESULT_OK) {  
                if (imageReturnedIntent!=null) {

                    File tempFile = getTempFile();

                    String filePath= Environment.getExternalStorageDirectory()
                        +"/"+TEMP_PHOTO_FILE;
                    System.out.println("path "+filePath);


                    Bitmap selectedImage =  BitmapFactory.decodeFile(filePath);
                    _image = (ImageView) findViewById(R.id.image);
                    _image.setImageBitmap(selectedImage );

                    if (tempFile.exists()) tempFile.delete();
                }
            }
    }       
}
46
jennifer

Sie benötigen keine Temp-Datei:

protected static final int REQ_CODE_PICK_IMAGE = 1;



Intent photoPickerIntent = new Intent(Intent.ACTION_PICK,
    Android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    photoPickerIntent.setType("image/*");
    photoPickerIntent.putExtra("crop", "true");
    photoPickerIntent.putExtra("return-data", true);
    photoPickerIntent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
    startActivityForResult(photoPickerIntent, REQ_CODE_PICK_IMAGE);


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

        super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

        switch (requestCode) {
            case REQ_CODE_PICK_IMAGE:
                if (resultCode == RESULT_OK) {  
                    if (imageReturnedIntent!=null) {
                        Bundle extras = imageReturnedIntent.getExtras();
                        Bitmap selectedBitmap = extras.getParcelable("data");
                        imageR = (ImageView) findViewById(R.id.image);
                        imageR.setImageBitmap(selectedBitmap);
                    }
                }
        }       
}
7
toni

Dieser Code ist gut für "Anfänger" ^^

private Bitmap FixBitmap;
Bitmap thePicBitmap;
String ImagePath = "image_path";
String ImagePath_1;
private static final String TEMP_PHOTO_FILE = "temporary_holder.jpg";
private static final int REQ_CODE_PICK_IMAGE = 0;




@Override
        public void onClick(View view) {
            try {




            //intent = new Intent();
            // intent = new   Intent(Intent.ACTION_PICK,Android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
             Intent photoPickerIntent = new Intent(Intent.ACTION_PICK, Android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            //intent.setAction(Intent.ACTION_GET_CONTENT);
             photoPickerIntent.setType("image/*");
             photoPickerIntent.putExtra("crop", "true");
             photoPickerIntent.putExtra("scale", true);
             photoPickerIntent.putExtra("aspectX", 1);
             photoPickerIntent.putExtra("aspectY", 1);
             // indicate output X and Y
             photoPickerIntent.putExtra("outputX", 150);
             photoPickerIntent.putExtra("outputY", 100);


             photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri());
             photoPickerIntent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
             startActivityForResult(photoPickerIntent, REQ_CODE_PICK_IMAGE);




            } catch (Exception e) {
               // Toast.makeText(getApplicationContext(), R.string.imageException, Toast.LENGTH_LONG).show();
                Log.e(e.getClass().getName(), e.getMessage(), e);
                Toast toast = Toast.makeText(Upload_image_text.this, "This device doesn't support the crop action!",
                        Toast.LENGTH_SHORT);
                toast.show();
            }




        }

        private Uri getTempUri() {
            return Uri.fromFile(getTempFile());
            }

        private File getTempFile() {
            if (isSDCARDMounted()) {

            File f = new File(Environment.getExternalStorageDirectory(),TEMP_PHOTO_FILE);
            try {
            f.createNewFile();
            } catch (IOException e) {

            }
            return f;
            } else {
            return null;
            }
            }

        private boolean isSDCARDMounted(){
            String status = Environment.getExternalStorageState();
            if (status.equals(Environment.MEDIA_MOUNTED))
            return true;
            return false;
            }
    });

=========================

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

    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);


    switch (requestCode) {
    case REQ_CODE_PICK_IMAGE:
        if (resultCode == RESULT_OK) {  
          if (imageReturnedIntent!=null){



          //     File tempFile = getTempFile();

              ImagePath_1 = Environment.getExternalStorageDirectory()
            + "/temporary_holder.jpg";
              System.out.println("path "+ImagePath_1);


              FixBitmap =  BitmapFactory.decodeFile(ImagePath_1);
              ShowSelectedImage = (ImageView)findViewById(R.id.imageView);
              ShowSelectedImage.setImageBitmap(FixBitmap);



          }
        }
    }
}

================================

@Override
        protected String doInBackground(Void... params) {


            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = 1;
            //options.outWidth = 50;
            //options.outHeight = 50;
            FixBitmap = BitmapFactory.decodeFile(ImagePath_1, options);
            //FixBitmap = BitmapFactory.decodeResource(getResources(), R.id.imageView);

           byteArrayOutputStream = new ByteArrayOutputStream();
           FixBitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream); //compress to 50% of original image quality
           byteArray = byteArrayOutputStream.toByteArray();

           ConvertImage = Base64.encodeToString(byteArray, Base64.DEFAULT);
0
Alobaidi