web-dev-qa-db-fra.com

Recadrer l'image dans Android

Je veux faire un recadrage d’image, j’en ai trouvé d’assez utiles, mais c’est comme si l’on manquait d’obscurcir les zones non sélectionnées, alors je me demande si quelqu'un sait comment? ou me conduire dans la bonne direction? Le tutoriel en ligne que j'ai trouvé montre qu'il va assombrir la zone sélectionnée mais que je ne l'utilise pas. S'il vous plaît aidez-moi merci beaucoup et désolé pour ma mauvaise maîtrise de l'anglais.

Liens vers le tutoriel que j'utilise.

Tutoriel d'image de culture 1

Crop Image tutorial 2

Je veux que ce soit quelque chose comme ça.

I want it be something like this

editButton.setOnClickListener(new Button.OnClickListener(){

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent goEdit;
            goEdit = new Intent(PreviewActivity.this, CropImage.class);
            goEdit.putExtra("image-path", path);
            goEdit.putExtra("scale", true);
            goEdit.putExtra("fileName", nameFromPath);
            //finish();
            checkEdit = true;
            startActivityForResult(goEdit,0);

        }
});

EDIT J'utilise cet écouteur de boutons pour appeler le fichier cropImage en appelant l'activité de classe CropImage. Il s’agit là d’une intention personnalisée et non de la fonction de recadrage d’Android, mais je pense que c’est la copie qui convient pour toutes les versions, mais lorsque j’appelle, la zone sélectionnée n’est pas illuminée et le problème est-il résolu? Merci C’est la bibliothèque que j’utilise drioid4you crop image

30
user1235085

Pouvez-vous utiliser la fonctionnalité de recadrage Android par défaut?

Voici mon code

private void performCrop(Uri picUri) {
    try {
        Intent cropIntent = new Intent("com.Android.camera.action.CROP");
        // indicate image type and Uri
        cropIntent.setDataAndType(picUri, "image/*");
        // set crop properties here
        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", 128);
        cropIntent.putExtra("outputY", 128);
        // retrieve data on return
        cropIntent.putExtra("return-data", true);
        // start the activity - we handle returning in onActivityResult
        startActivityForResult(cropIntent, PIC_CROP);
    }
    // respond to users whose devices do not support the crop action
    catch (ActivityNotFoundException anfe) {
        // display an error message
        String errorMessage = "Whoops - your device doesn't support the crop action!";
        Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT);
        toast.show();
    }
}

déclarer:

final int PIC_CROP = 1;

en haut.

Dans la méthode de résultat onActivity, le code suivant est le suivant:

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

    if (requestCode == PIC_CROP) {
        if (data != null) {
            // get the returned data
            Bundle extras = data.getExtras();
            // get the cropped bitmap
            Bitmap selectedBitmap = extras.getParcelable("data");

            imgView.setImageBitmap(selectedBitmap);
        }
    }
}

Il est assez facile pour moi de mettre en œuvre et montre également les zones sombres.

48
Akbari Dipali

Cette bibliothèque: Android-Image-Cropper est très puissante pour CropImages. Il a 3.731 étoiles sur github en ce moment.

Vous recadrez vos images avec quelques lignes de code.

1 - Ajouter les dépendances dans buid.gradle (Module: app)

compile 'com.theartofdev.edmodo:Android-image-cropper:2.7.+'

2 - Ajouter les autorisations dans AndroidManifest.xml

<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE"/>

3 - Ajouter CropImageActivity dans AndroidManifest.xml

<activity Android:name="com.theartofdev.edmodo.cropper.CropImageActivity"
 Android:theme="@style/Base.Theme.AppCompat"/>

4 - Commencez l’activité avec l’un des cas ci-dessous, en fonction de vos besoins.

// start picker to get image for cropping and then use the image in cropping activity
CropImage.activity()
.setGuidelines(CropImageView.Guidelines.ON)
.start(this);

// start cropping activity for pre-acquired image saved on the device
CropImage.activity(imageUri)
.start(this);

// for fragment (DO NOT use `getActivity()`)
CropImage.activity()
.start(getContext(), this);

5 - Obtenir le résultat dans onActivityResult

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
    CropImage.ActivityResult result = CropImage.getActivityResult(data);
    if (resultCode == RESULT_OK) {
      Uri resultUri = result.getUri();
    } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
      Exception error = result.getError();
    }
  }
}

Vous pouvez effectuer plusieurs personnalisations , en définissant le rapport de format ou la forme sur RECTANGLE, OVAL et bien plus encore. 

3
Soon Santos

J'ai trouvé une bibliothèque vraiment cool, essayez ceci. c'est vraiment lisse et facile à utiliser.

https://github.com/TakuSemba/CropMe

2
Taku Semba

j'espère que vous allez bien ... vous pouvez utiliser mon code pour rogner image.Vous devez simplement créer une classe et l'utiliser dans vos classes XMl et Java . Rogner l'image . peut rogner votre image sélectionnée en cercle et en plusieurs options . espérons que cela fonctionnera pour vous.parce que c’est totalement gérable pour vous et que vous pouvez la modifier à votre guise.

prenez du plaisir à votre travail :)

1
John smith