web-dev-qa-db-ja.com

Android:元の画像のURIを指定して、SDカードの画像のサムネイルを取得します

だから私はユーザーが彼のSDカードからの画像から選択した画像のURIを持っています。そして、その画像のサムネイルを表示したいと思います。明らかに、画像が巨大で画面全体を占める可能性があるためです。誰もが方法を知っていますか?

11
Rahat Ahmed

JavaのThumnailUtilクラスを使用してサムネイルビデオと画像を簡単に作成できます

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


 public static Bitmap createVideoThumbnail (String filePath, int kind)

APIレベル8で追加されました。ビデオのビデオサムネイルを作成します。ビデオが破損しているか、フォーマットがサポートされていない場合、nullを返すことがあります。

パラメータfilePathビデオファイルの種類のパスはMINI_KINDまたはMICRO_KINDである可能性があります

Thumbnail Utilクラスのその他のソースコードについて

Developer.Android.com

9
sujith s

このコードは仕事をします:

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

言われている の方が速いので、inSampleSizeに使用する最も近い2の累乗を計算することをお勧めします。

6
Gubbel

このコードは、SDカード上のファイルからサムネイルを生成する最も速い方法だと思います。

 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

SDから画像のサムネイルパスを取得できませんでした。グリッドビュー用のアダプターで(または必要な場所で)画像ビューを作成する前に、Android画像ビットマップを取得するこの問題を解決しました。そこで、メソッド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;
}

このガイドを使用してSDから画像IDを取得できます( Androidのフォトギャラリーのリストを取得

1
IHAFURR

HQサムネイルが気に入った場合は、[RapidDecoder] [1]ライブラリを使用してください。それは次のように簡単です:

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

50%未満のスケールダウンとHQの結果が必要な場合は、組み込みのデコーダーを使用することを忘れないでください。 APIレベル8でテストしました:)

0
S.M.Mousavi