だから私はユーザーが彼のSDカードからの画像から選択した画像のURIを持っています。そして、その画像のサムネイルを表示したいと思います。明らかに、画像が巨大で画面全体を占める可能性があるためです。誰もが方法を知っていますか?
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である可能性があります
このコードは仕事をします:
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の累乗を計算することをお勧めします。
このコードは、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);
}
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のフォトギャラリーのリストを取得 )
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でテストしました:)