it-swarm.com.de

android: Wählen Sie ein Bild aus der Galerie aus, beschneiden Sie es und zeigen Sie es in einer Bildansicht an

ich brauche wirklich diesen Code und habe 3 Stunden im Internet gesucht, aber ich konnte keinen vollständigen und einfachen Code finden und habe viele Codes getestet, aber einige funktionierten nicht und andere waren nicht gut. Bitte helfen Sie mir mit einem vollständigen und einfachen Code Code, danke edit: Ich habe diesen Code für ein ausgewähltes Bild, aber geben Sie mir bitte einen vollständigen Code für alle Dinge, die ich im Titel gesagt habe, weil ich Codes nicht ähneln kann.

  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

Hoffe, dieser Code wird dir helfen ..

Aktivität So wählen Sie das Bild aus der Galerie aus.

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

Aktivität, um das ausgewählte Bild zuzuschneiden:

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

Bearbeiten: Überprüfen Sie diese Open Source-Bibliothek, um ein Bild aus der Galerie auszuwählen oder ein neues Bild mit der Kamera aufzunehmen. Es wird viel Boilerplate-Code gespeichert. https://github.com/Dhaval2404/ImagePicker

41
Dhaval Patel

Ich poste hier den Arbeitscode:

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

in onActivityResult

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

Bitte versuchen Sie das.

7

ich habe einen etwas anderen Ansatz

ich verwende external library , um meine Downloads zu verwalten Die Bibliothek lädt sie im Hintergrund

diese Einstellungen erlauben eine gute Performance für eine Liste mit vielen Elementen und schnellem Bildlauf :)

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