如何在使用camera.TakePicture拍照时找到getThumbnail的origID

时间:2012-11-30 21:34:51

标签: android camera thumbnails

对于getThumbnail,android文档有:

  

public static Bitmap getThumbnail(ContentResolver cr,long origId,long groupId,int kind,BitmapFactory.Options options)

在使用Camera.TakePicture拍照时,我完全不知道如何获得origId(原始图像的ID以执行getThumbnail)。

根据我读过的其他各种问题,我目前的尝试是:

String[] projection = { MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA };
    String sort = MediaStore.Images.ImageColumns._ID + " DESC";
    Log.d("getting IDs:",sort);
    Cursor myCursor = managedQuery(imagesUri, projection, null, null, sort);
    myCursor.moveToFirst();
    thumbBitmap = MediaStore.Images.Thumbnails.getThumbnail(getContentResolver(), myCursor.getLong(myCursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns._ID)), MediaStore.Images.Thumbnails.MINI_KIND, null );

但是,我的日志输出的字符串为“_ID”,应该是实际ID,然后在我尝试创建myCursor的行上给出一个空指针异常。

我还读到了其他人的类似问题的答案,即SD卡上的图片没有 ID,在这种情况下,我猜origID实际上是一个URI而且文档只是搞砸了吗?我非常困惑,任何解释都会非常受欢迎。

1 个答案:

答案 0 :(得分:2)

我最终无法使用getThumbnail,因为我找不到任何工作方式来使用路径到图像的位置,并且(至少在当时,我相信已经提交了报告)它设备没有将缩略图存储在预期位置的问题。

我的解决方案最终成为我希望可以避免的,编写我自己的小缩略图生成器,而不是使用Android的getThumbnail。

public class CreateThumbnail extends Activity {
    Bitmap imageBitmap;
    public Bitmap notTheBestThumbnail(String file) {
        byte[] imageData = null;
        try     
        {

            final int THUMBNAIL_SIZE = 95;

            FileInputStream fis = new FileInputStream(file); //file is the path to the image-to-be-thumbnailed.
            imageBitmap = BitmapFactory.decodeStream(fis);
            imageBitmap = Bitmap.createScaledBitmap(imageBitmap, THUMBNAIL_SIZE, THUMBNAIL_SIZE, false);

            ByteArrayOutputStream baos = new ByteArrayOutputStream();  
            imageBitmap.compress(Bitmap.CompressFormat.JPEG, 10, baos); //What image format and level of compression to use.
            imageData = baos.toByteArray();

        }
        catch(Exception ex) {
            Log.e("Something did not work", "True");
        }
        return imageBitmap;
    }   
}

我使用类似的类:

CreateThumbnail thumb = new CreateThumbnail();
thumb.notTheBestThumbnail(Environment.getExternalStorageDirectory() + "/exampleDir" + "/" + exampleVar  + "/example_img.jpg");
Bitmap mBitmap = thumb.imageBitmap; //Assigns the thumbnail to a bitmap variable, for manipulation.

虽然我实际上并没有弄清楚如何获取ID,但希望这可以帮助任何遇到getThumbnail类似问题的人。