从安卓相册选择缩略图

7

我知道如何在Android中从相册获取照片。

Intent gallery = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(gallery, PHOTO_REQUEST_CODE);

但是我该如何具体选择缩略图呢?

悬赏的原因:

我已经尝试了获取存储在SD卡和Android中的图像的缩略图URI /路径这两个解决方案。但它们对我没有用。我不知道如何从data中获取selectedImageUri,它是long类型。

 onActivityResult(int requestCode, int resultCode, Intent data)

1
可能是获取存储在SD卡上的图像的缩略图URI/路径+Android的重复问题。 - Miro Markaravanes
@MiroMarkarian,感谢提供的链接。但是当我使用Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail( getContentResolver(), data.getData(), MediaStore.Images.Thumbnails.MINI_KIND, (BitmapFactory.Options) null);时出现了错误。请问如何将data.getData()更改为回复中建议的id? - Pouton Gerald
尝试使用“光标”。那边的人建议的第二个解决方案,据报道比“位图”选项效果更好。 - Miro Markaravanes
@MiroMarkarian 第二种解决方案期望将selectedImageUri作为long类型传入,但我只有data.getData()。我该如何获取/解析ID? - Pouton Gerald
嘿,你解决了吗?我也在看同样的问题... - Jona
3个回答

0

如果你手头有它的光标,你可以获取它的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);

0

嘿,如果其他方法都不起作用,这里有一个简单的方法可以让你根据位图创建自己的缩略图。如果你不知道如何从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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接