wake-up-neo.net

Android: Holen Sie sich ein Miniaturbild des Bildes auf der SD-Karte, wenn der Uri das Originalbild enthält

Ich habe also einen Uri eines Bildes, das der Benutzer aus Bildern seiner SD-Karte auswählt. Und ich möchte eine Miniaturansicht dieses Bildes anzeigen, da das Bild offensichtlich riesig sein und den gesamten Bildschirm einnehmen kann. Weiß jemand wie?

11
Rahat Ahmed

Sie können einfach ein Miniaturvideo und ein Bild mit der Java-Klasse ThumnailUtil erstellen

Bitmap resized = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(file.getPath()), width, height);


 public static Bitmap createVideoThumbnail (String filePath, int kind)

Hinzugefügt in API Level 8 Erstellen Sie ein Video-Miniaturbild für ein Video. Kann Null zurückgeben, wenn das Video beschädigt ist oder das Format nicht unterstützt wird.

Parameter FilePath Der Pfad der Videodatei Kann MINI_KIND oder MICRO_KIND sein

Für mehr Quellcode der Thumbnail Util-Klasse

Developer.Android.com

9
sujith s

Dieser Code erledigt die Arbeit:

Bitmap getPreview(URI uri) {
    File image = new File(uri);

    BitmapFactory.Options bounds = new BitmapFactory.Options();
    bounds.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(image.getPath(), bounds);
    if ((bounds.outWidth == -1) || (bounds.outHeight == -1))
        return null;

    int originalSize = (bounds.outHeight > bounds.outWidth) ? bounds.outHeight
            : bounds.outWidth;

    BitmapFactory.Options opts = new BitmapFactory.Options();
    opts.inSampleSize = originalSize / THUMBNAIL_SIZE;
    return BitmapFactory.decodeFile(image.getPath(), opts);     
}

Möglicherweise möchten Sie die nächste Potenz von 2 berechnen, die für inSampleSize verwendet werden soll, da es heißt schneller ist.

6
Gubbel

Ich glaube, dass dieser Code die schnellste Möglichkeit ist, ein Miniaturbild aus einer Datei auf der SD-Karte zu erstellen:

 public static Bitmap decodeFile(String file, int size) {
    //Decode image size
    BitmapFactory.Options o = new BitmapFactory.Options();
    o.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(file, o);

    //Find the correct scale value. It should be the power of 2.
    int width_tmp = o.outWidth, height_tmp = o.outHeight;
    int scale = (int)Maths.pow(2, (double)(scale-1));
    while (true) {
        if (width_tmp / 2 < size || height_tmp / 2 < size) {
            break;
        }
        width_tmp /= 2;
        height_tmp /= 2;
        scale++;
    }

    //Decode with inSampleSize
    BitmapFactory.Options o2 = new BitmapFactory.Options();
    o2.inSampleSize = scale;
    return BitmapFactory.decodeFile(file, o2);
}
2
David Vávra

Wenn Sie HQ-Miniaturbilder mögen, verwenden Sie die Bibliothek [RapidDecoder] [1]. Es ist einfach wie folgt:

import rapid.decoder.BitmapDecoder;
...
Bitmap bitmap = BitmapDecoder.from(getResources(), R.drawable.image)
                             .scale(width, height)
                             .useBuiltInDecoder(true)
                             .decode();

Vergessen Sie nicht, den eingebauten Decoder zu verwenden, wenn Sie weniger als 50% und ein HQ-Ergebnis reduzieren möchten. Ich habe es in API Level 8 getestet :)

0
S.M.Mousavi

Ein paar Versuche Ich konnte den Thumbnail-Pfad des Bildes nicht von SD erhalten. Ich habe dieses Problem gelöst und eine Android-Bild-Bitmap erhalten, bevor ich eine Bildansicht im Adapter für Gridview (oder wo Sie brauchen) erstelle. Also nenne ich die Methode imageView.setImageBitmap(someMethod(Context context, imageID))

Bitmap someMethod(Context context, long imageId){

    Bitmap bitmap =   Media.Images.Thumbnails.getThumbnail(context.getAplicationContext.getContentResolver(), imageid, MediaStore.Images.Thumbnails.MINI_KIND, null);
    return bitmap;
}

Sie können mit dieser Anleitung eine Bild-ID von Ihrem SD erhalten ( Liste der Fotogalerien auf Android holen )

0
IHAFURR