web-dev-qa-db-fra.com

android: sélectionnez une image dans la galerie, puis rognez-la et affichez-la dans une image

j'ai vraiment besoin de ce code et j'ai recherché 3 heures sur Internet mais je ne pouvais pas trouver un code complet et simple et j'ai testé de nombreux codes mais certains ne fonctionnaient pas et d'autres n'étaient pas bons, aidez-moi s'il vous plaît avec un code complet code, merci modifier: j'ai ce code pour sélectionner l'image mais donnez-moi s'il vous plaît un code complet pour toutes les choses que j'ai dites dans le titre parce que je ne peux pas ressembler à des codes.

  btn_choose.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                   Intent intent = new Intent();
                    intent.setType("image/*");
                    intent.setAction(Intent.ACTION_GET_CONTENT);
       startActivityForResult(Intent.createChooser(intent,"Select Picture"),SELECT_PICTURE);


            alertDialog1.dismiss();

            }
        });
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {

       if (resultCode == RESULT_OK) {

   if (requestCode == SELECT_PICTURE) {
                        Uri selectedImageUri = data.getData();
                        selectedImagePath = getPath(selectedImageUri);
                        selectedImagePath1=selectedImagePath;
                        System.out.println("Image Path : " + selectedImagePath);
                        image_capture1.setImageURI(selectedImageUri);
                    }
22
user3648435

Espérons que ce code vous aidera.

Activité pour sélectionner l'image de la galerie.

import Java.io.File;
import Android.app.Activity;
import Android.content.Intent;
import Android.database.Cursor;
import Android.net.Uri;
import Android.os.Bundle;
import Android.provider.MediaStore;
import Android.util.Log;

public class GalleryUtil extends Activity{
    private final static int RESULT_SELECT_IMAGE = 100;
    public static final int MEDIA_TYPE_IMAGE = 1;
    private static final String TAG = "GalleryUtil";

    String mCurrentPhotoPath;
    File photoFile = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try{
            //Pick Image From Gallery
            Intent i = new Intent(Intent.ACTION_PICK, Android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(i, RESULT_SELECT_IMAGE); 
        }catch(Exception e){
            e.printStackTrace();
        }
    }

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

        switch(requestCode){
        case RESULT_SELECT_IMAGE:

            if (resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
                try{
                Uri selectedImage = data.getData();
                String[] filePathColumn = {MediaStore.Images.Media.DATA };
                Cursor cursor = getContentResolver().query(selectedImage,
                        filePathColumn, null, null, null);
                cursor.moveToFirst();
                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                String picturePath = cursor.getString(columnIndex);
                cursor.close();

                //return Image Path to the Main Activity
                Intent returnFromGalleryIntent = new Intent();
                returnFromGalleryIntent.putExtra("picturePath",picturePath);
                setResult(RESULT_OK,returnFromGalleryIntent);     
                finish();
                }catch(Exception e){
                    e.printStackTrace();
                    Intent returnFromGalleryIntent = new Intent();
                    setResult(RESULT_CANCELED, returnFromGalleryIntent);     
                    finish();   
                }
            }else{
                Log.i(TAG,"RESULT_CANCELED");     
                Intent returnFromGalleryIntent = new Intent();
                setResult(RESULT_CANCELED, returnFromGalleryIntent);     
                finish();
            }
            break;
        }
    }
}

Activité de recadrage de l'image sélectionnée:

public class ImageSelecter extends Activity{

    private final int GALLERY_ACTIVITY_CODE=200;
    private final int RESULT_CROP = 400;

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

        btn_choose.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                //Start Activity To Select Image From Gallery   
                Intent gallery_Intent = new Intent(getApplicationContext(), GalleryUtil.class);
                startActivityForResult(gallery_Intent, GALLERY_ACTIVITY_CODE);
            }
        });

    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == GALLERY_ACTIVITY_CODE) {
             if(resultCode == Activity.RESULT_OK){  
                 picturePath = data.getStringExtra("picturePath");  
                 //perform Crop on the Image Selected from Gallery
                 performCrop(picturePath);
             }
        }

        if (requestCode == RESULT_CROP ) {
             if(resultCode == Activity.RESULT_OK){  
                 Bundle extras = data.getExtras();
                 Bitmap selectedBitmap = extras.getParcelable("data");
                 // Set The Bitmap Data To ImageView
                 image_capture1.setImageBitmap(selectedBitmap);                             
                 image_capture1.setScaleType(ScaleType.FIT_XY);
             }
        }
    }

    private void performCrop(String picUri) {
        try {
            //Start Crop Activity

            Intent cropIntent = new Intent("com.Android.camera.action.CROP");
            // indicate image type and Uri
            File f = new File(picUri);
            Uri contentUri = Uri.fromFile(f);

            cropIntent.setDataAndType(contentUri, "image/*");
            // set crop properties
            cropIntent.putExtra("crop", "true");
            // indicate aspect of desired crop
            cropIntent.putExtra("aspectX", 1);
            cropIntent.putExtra("aspectY", 1);
            // indicate output X and Y
            cropIntent.putExtra("outputX", 280);
            cropIntent.putExtra("outputY", 280);

            // retrieve data on return
            cropIntent.putExtra("return-data", true);
            // start the activity - we handle returning in onActivityResult
            startActivityForResult(cropIntent, RESULT_CROP);
        }
        // respond to users whose devices do not support the crop action
        catch (ActivityNotFoundException anfe) {
            // display an error message
            String errorMessage = "your device doesn't support the crop action!";
            Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT);
            toast.show();
        }
    }   
}

Edit: Consultez cette bibliothèque open source pour choisir une image dans la galerie ou capturer une nouvelle image avec l'appareil photo. Cela économisera beaucoup de code passe-partout. https://github.com/Dhaval2404/ImagePicker

41
Dhaval Patel

Je poste ici le code de travail:

private static final int PICK_FROM_GALLERY = 2;

buttonGallery.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
      //******call Android default gallery
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
      //******code for crop image
            intent.putExtra("crop", "true");
            intent.putExtra("aspectX", 0);
            intent.putExtra("aspectY", 0);
            try {
               intent.putExtra("return-data", true);
               startActivityForResult(
                  Intent.createChooser(intent,"Complete action using"),
                  PICK_FROM_GALLERY);
            } catch (ActivityNotFoundException e) {}
        }
    });
}

à l'intérieur onActivityResult

if (requestCode == PICK_FROM_GALLERY) {
    Bundle extras2 = data.getExtras();
    if (extras2 != null) {
            Bitmap photo = extras2.getParcelable("data");
            imgview.setImageBitmap(photo);
    }
}

S'il vous plaît essayez ceci.

7
siddhartha shankar

j'ai une approche un peu différente

j'utilise bibliothèque externe pour gérer mes téléchargements la bibliothèque le chargera en arrière-plan

ces paramètres permettent de bonnes performances pour la liste avec beaucoup d’éléments et le défilement rapide :)

DisplayImageOptions options=new DisplayImageOptions.Builder()                       .cacheOnDisk(true)
        .imageScaleType(ImageScaleType.EXACTLY)
        .considerExifParams(true)
        .bitmapConfig(Bitmap.Config.RGB_565)
        .imageScaleType(ImageScaleType.EXACTLY)     
        .build();

ImageLoader.getInstance().displayImage(url, imageView, options);
0
Ilia