【问题标题】:select thumbnail from android gallery从 android 图库中选择缩略图
【发布时间】: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)

【问题讨论】:

  • @MiroMarkarian 感谢您的链接。但是当我使用Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail( getContentResolver(), data.getData(), MediaStore.Images.Thumbnails.MINI_KIND, (BitmapFactory.Options) null); 时出现错误。我如何将data.getData() 更改为回复中建议的 id?
  • 尝试使用Cursors。这是那边那个人建议的第二个解决方案,据报道它比Bitmap选项效果更好
  • @MiroMarkarian 第二个解决方案期望longselectedImageUri。但我只有data.getData()。如何获取/解析 id?
  • 嘿,你有想过吗?我在看同样的问题...

标签: android android-intent bitmap thumbnails android-image


【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-24
        • 1970-01-01
        • 1970-01-01
        • 2011-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多