SDKバージョン-1.6
私は次の意図を使用して、Androidのデフォルトギャラリーを開きます。
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(
Intent.createChooser(intent, "Select Picture"), 101);
onActivityResult
では、選択した画像の元のUriとパスを取得できますが、選択した画像のサムネイルのUriとパスを取得することはできません。
元の画像のUriとパスを取得するためのコード:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try {
if (requestCode == 101 && data != null) {
Uri selectedImageUri = data.getData();
String selectedImagePath = getPath(selectedImageUri);
} else {
Toast toast = Toast.makeText(this, "No Image is selected.",
Toast.LENGTH_LONG);
toast.show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
PS:1)このように画像のサイズを変更するつもりはありません 質問 。 Android OS自体によって生成されるサムネイルを探しています。
2)SDKバージョン1.6を使用しているので、 ThumbnailUtils クラスには興味がありません。
これを使用してサムネイルを取得できます。
Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail(
getContentResolver(), selectedImageUri,
MediaStore.Images.Thumbnails.MINI_KIND,
(BitmapFactory.Options) null );
使用可能なサムネイルには2つのタイプがあります。
MINI_KIND:512 x 384サムネイル
MICRO_KIND:96 x 96サムネイル
または、ほぼ同じパラメーターで[queryMiniThumbnails] [1]を使用して、サムネイルのパスを取得します。
[〜#〜] edit [〜#〜]
Cursor cursor = MediaStore.Images.Thumbnails.queryMiniThumbnails(
getContentResolver(), selectedImageUri,
MediaStore.Images.Thumbnails.MINI_KIND,
null );
if( cursor != null && cursor.getCount() > 0 ) {
cursor.moveToFirst();//**EDIT**
String uri = cursor.getString( cursor.getColumnIndex( MediaStore.Images.Thumbnails.DATA ) );
}
HTH!
[1]: https://developer.Android.com/reference/Android/provider/MediaStore.Images.Thumbnails.html#queryMiniThumbnails(Android.content.ContentResolver 、Android.net.Uri、int 、Java.lang.String [])
これ 解決策は私にかかっています!
final int THUMBSIZE = 128;
Bitmap thumbImage = ThumbnailUtils.extractThumbnail(
BitmapFactory.decodeFile(file.getAbsolutePath()),
THUMBSIZE,
THUMBSIZE);
他の回答ですでに述べたように、別の方法かもしれませんが、サムネイルを取得する簡単な方法は ExifInterface
を使用することです
ExifInterface exif = new ExifInterface(pictureFile.getPath());
byte[] imageData=exif.getThumbnail();
Bitmap thumbnail= BitmapFactory.decodeByteArray(imageData,0,imageData.length);
非推奨のメソッドのない2つのバリアント。
public String getThumbnailPath(Uri uri) {
String[] proj = { MediaStore.Images.Media.DATA };
// This method was deprecated in API level 11
// Cursor cursor = managedQuery(contentUri, proj, null, null, null);
CursorLoader cursorLoader = new CursorLoader(activity, uri, proj, null, null, null);
Cursor cursor = cursorLoader.loadInBackground();
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
cursor.moveToFirst();
long imageId = cursor.getLong(column_index);
//cursor.close();
String result="";
cursor = MediaStore.Images.Thumbnails.queryMiniThumbnail(activity.getContentResolver(), imageId,
MediaStore.Images.Thumbnails.MINI_KIND, null);
if (cursor != null && cursor.getCount() > 0) {
cursor.moveToFirst();
result = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.DATA));
cursor.close();
}
return result;
}
public Bitmap getThumbnailBitmap(Uri uri){
String[] proj = { MediaStore.Images.Media.DATA };
// This method was deprecated in API level 11
// Cursor cursor = managedQuery(contentUri, proj, null, null, null);
CursorLoader cursorLoader = new CursorLoader(activity, uri, proj, null, null, null);
Cursor cursor = cursorLoader.loadInBackground();
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
cursor.moveToFirst();
long imageId = cursor.getLong(column_index);
//cursor.close();
Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail(
getContentResolver(), imageId,
MediaStore.Images.Thumbnails.MINI_KIND,
(BitmapFactory.Options) null );
return bitmap;
}
@Karanの回答と次のコメントに基づいて、ここに到着した(私がしたように)すぐに使えるコードを必要とする人々のために:
public String getThumbnailPath(Uri uri) {
String[] projection = { MediaStore.Images.Media._ID };
String result = null;
Cursor cursor = managedQuery(uri, projection, null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
cursor.moveToFirst();
long imageId = cursor.getLong(column_index);
cursor.close();
cursor = MediaStore.Images.Thumbnails.queryMiniThumbnail(
getContentResolver(), imageId,
MediaStore.Images.Thumbnails.MINI_KIND,
null);
if (cursor != null && cursor.getCount() > 0) {
cursor.moveToFirst();
result = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.DATA));
cursor.close();
}
return result;
}
public static String getThumbnailPath(Context context, String path)
{
long imageId = -1;
String[] projection = new String[] { MediaStore.MediaColumns._ID };
String selection = MediaStore.MediaColumns.DATA + "=?";
String[] selectionArgs = new String[] { path };
Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, selection, selectionArgs, null);
if (cursor != null && cursor.moveToFirst())
{
imageId = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
cursor.close();
}
String result = null;
cursor = MediaStore.Images.Thumbnails.queryMiniThumbnail(context.getContentResolver(), imageId, MediaStore.Images.Thumbnails.MINI_KIND, null);
if (cursor != null && cursor.getCount() > 0)
{
cursor.moveToFirst();
result = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.DATA));
cursor.close();
}
return result;
}
受け入れられた答えは私のために働いていません。私はそれを作るために次の方法を使用します:
try{
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getActivity().getContentResolver(), uri);
Bitmap thumbBitmap = ThumbnailUtils.extractThumbnail(bitmap,120,120);
// imageView.setImageBitmap(thumbBitmap);
}
catch (IOException ex){
//......
}