68 votes

Android comment créer une vignette d'exécution

J'ai une image de grande taille. Au moment de l'exécution, je souhaite lire l'image stockée et la redimensionner de manière à réduire son poids et sa taille et à pouvoir l'utiliser comme une vignette. Lorsqu'un utilisateur clique sur la vignette, je souhaite afficher l'image en taille réelle.

133voto

Dax Points 1945

Essayez ceci

Cet utilitaire est disponible chez API_LEVEl 8. [Source]

50voto

kakopappa Points 1589

Ma Solution

9voto

cdavidyoung Points 1241

Voici une solution plus complète pour mise à l'échelle vers le bas d'une image Bitmap de taille des vignettes. Il s'étend sur l'image Bitmap.createScaledBitmap solution en maintenant le ratio d'aspect des images et aussi rembourrage à la même largeur, de sorte qu'ils ont l'air bon dans une ListView.

Aussi, il serait préférable de faire cette mise à l'échelle une fois et stocker le fichier Bitmap, comme une goutte dans votre base de données Sqlite. J'ai inclus un extrait de code sur la façon de convertir l'image dans un tableau d'octets à cette fin.

public static final int THUMBNAIL_HEIGHT = 48;
public static final int THUMBNAIL_WIDTH = 66;

imageBitmap = BitmapFactory.decodeByteArray(mImageData, 0, mImageData.length);
Float width  = new Float(imageBitmap.getWidth());
Float height = new Float(imageBitmap.getHeight());
Float ratio = width/height;
imageBitmap = Bitmap.createScaledBitmap(imageBitmap, (int)(THUMBNAIL_HEIGHT*ratio), THUMBNAIL_HEIGHT, false);

int padding = (THUMBNAIL_WIDTH - imageBitmap.getWidth())/2;
imageView.setPadding(padding, 0, padding, 0);
imageView.setImageBitmap(imageBitmap);



ByteArrayOutputStream baos = new ByteArrayOutputStream();  
imageBitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] byteArray = baos.toByteArray();

6voto

Jim Blackler Points 14306

Utilisez BitmapFactory.decodeFile (...) pour obtenir votre objet Bitmap et le définir sur un ImageView avec ImageView.setImageBitmap ().

Dans ImageView, définissez les dimensions de la mise en page sur quelque chose de petit, par exemple:

 android:layout_width="66dip" android:layout_height="48dip"
 

Ajoutez un onClickListener à ImageView et lancez une nouvelle activité dans laquelle vous affichez l’image en taille réelle avec

 android:layout_width="wrap_content" android:layout_height="wrap_content"
 

ou spécifiez une taille plus grande.

3voto

user1546570 Points 81
/**
 * Creates a centered bitmap of the desired size.
 *
 * @param source original bitmap source
 * @param width targeted width
 * @param height targeted height
 * @param options options used during thumbnail extraction
 */
public static Bitmap extractThumbnail(
        Bitmap source, int width, int height, int options) {
    if (source == null) {
        return null;
    }

    float scale;
    if (source.getWidth() < source.getHeight()) {
        scale = width / (float) source.getWidth();
    } else {
        scale = height / (float) source.getHeight();
    }
    Matrix matrix = new Matrix();
    matrix.setScale(scale, scale);
    Bitmap thumbnail = transform(matrix, source, width, height,
            OPTIONS_SCALE_UP | options);
    return thumbnail;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X