从 android 图库中选择缩略图
Posted
技术标签:
【中文标题】从 android 图库中选择缩略图【英文标题】:select thumbnail from android gallery 【发布时间】:2013-05-31 11:09:09 【问题描述】:我知道如何从 android 的图库中获取照片
Intent gallery = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(gallery, PHOTO_REQUEST_CODE);
但是我该如何具体选择缩略图呢?
赏金理由:
我已经在 Get thumbnail Uri/path of the image stored in sd card + android 尝试了这两种解决方案。他们不适合我。我不知道如何从data
中获取selectedImageUri
类型为long
的方法
onActivityResult(int requestCode, int resultCode, Intent data)
【问题讨论】:
Get thumbnail Uri/path of the image stored in sd card + android的可能重复 @MiroMarkarian 感谢您的链接。但是当我使用Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail( getContentResolver(), data.getData(), MediaStore.Images.Thumbnails.MINI_KIND, (BitmapFactory.Options) null);
时出现错误。我如何将data.getData()
更改为回复中建议的 id?
尝试使用Cursor
s。这是那边那个人建议的第二个解决方案,据报道它比Bitmap
选项效果更好
@MiroMarkarian 第二个解决方案期望long
为selectedImageUri
。但我只有data.getData()
。如何获取/解析 id?
嘿,你有想过吗?我在看同样的问题...
【参考方案1】:
String fn = ...; // file name
ContentResolver cr = ctx.getContentResolver();
Cursor c = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
new String[]
BaseColumns._ID
, MediaColumns.DATA + "=?", new String[] fn , null);
if(c!=null)
try
if(c.moveToNext())
long id = c.getLong(0);
Bitmap thumbnail = MediaStore.Images.Thumbnails.getThumbnail(cr, id, MediaStore.Images.Thumbnails.MINI_KIND, null);
finally
c.close();
【讨论】:
【参考方案2】:如果你手上有它的光标,你可以得到它的ID,
int id = cursor.getInt(cursor
.getColumnIndex(MediaStore.MediaColumns._ID));
参考以下代码
Cursor cursor = context.getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
new String[] MediaStore.Images.Media._ID ,
MediaStore.Images.Media.DATA + "=? ",
new String[] filePath , null);
if (cursor != null && cursor.moveToFirst())
int id = cursor.getInt(cursor
.getColumnIndex(MediaStore.MediaColumns._ID));
Uri baseUri = Uri.parse("content://media/external/images/media");
return Uri.withAppendedPath(baseUri, "" + id);
所以,对于缩略图,
Bitmap thumbnail = MediaStore.Images.Thumbnails.getThumbnail(cursor, id, MediaStore.Images.Thumbnails.MINI_KIND, null);
【讨论】:
【参考方案3】:嘿,所以如果其他一切都不适合你,那么如果你有位图,这里是一种制作自己的缩略图的简单方法。如果您不知道如何从 Uri 加载位图:
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
以下是制作精美缩略图的代码:
final int THUMBNAIL_HEIGHT = 75;//48
final int THUMBNAIL_WIDTH = 75;//66
Float width = new Float(bitmap.getWidth());
Float height = new Float(bitmap.getHeight());
Float ratio = width/height;
bitmap = Bitmap.createScaledBitmap(bitmap, (int)(THUMBNAIL_HEIGHT*ratio), THUMBNAIL_HEIGHT, false);
int padding = (THUMBNAIL_WIDTH - bitmap.getWidth())/2;
image.setPadding(padding, padding, padding, padding);
image.setBackgroundColor(0);
image.setImageBitmap(bitmap);
在这段代码中,“image”是 ImageView 的变量。我希望这会有所帮助:D
【讨论】:
以上是关于从 android 图库中选择缩略图的主要内容,如果未能解决你的问题,请参考以下文章