2

对于 getThumbnail,android 文档有:

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

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

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

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,而文档只是搞砸了?我非常困惑,非常欢迎任何解释。

4

1 回答 1

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 类似问题的人。

于 2013-03-29T21:00:56.017 回答