1

基本的に、次のような画像パスがあります: /mnt/sdcard/Pictures/image.jpg そして、可能な限り最速の方法で、そこからサムネイルへのパスを取得する必要があります。

MediaStore.Images.Thumbnails.queryMiniThumbnail を使用しようとしていますが、何を渡しても null カーソルが表示されます。ありがとう!

編集: これは、すべての画像パスとサムネイル パスを取得し、文字列に格納する関数です。必要なのは、特定の画像パス (/mnt/sdcard/Pictures/image.jpg) のサムネイル パスを返す関数です。ありがとう

public String getThumbPaths(ThumbContext ctx) {
    Uri uri = MediaStore.Images.Thumbnails.getContentUri("external");

    Cursor cursor = MediaStore.Images.Thumbnails.queryMiniThumbnails(ctx
            .getActivity().getContentResolver(), uri,
            MediaStore.Images.Thumbnails.MINI_KIND, null);

    int columnIndex = cursor.getColumnIndex(Thumbnails.IMAGE_ID);

    String[] filePathColumn = { MediaStore.Images.Media.DATA };

    StringBuilder stringBuilder = new StringBuilder();

    String id = MediaStore.Images.Media._ID + "=?";

    String orientation="1";

    for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {

        String imageId = cursor.getString(columnIndex);

        Cursor images = ctx.getActivity().managedQuery(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                filePathColumn, id,
                new String[] { imageId }, null);

        String filePath = "";
        if (images != null && images.moveToFirst()) {
            filePath = images.getString(images
                    .getColumnIndex(filePathColumn[0]));
        }

        ExifInterface exifReader;
        try {
            exifReader = new ExifInterface(filePath);
            orientation=exifReader.getAttribute(ExifInterface.TAG_ORIENTATION);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            //e.printStackTrace();
        }


        stringBuilder.append(cursor.getString(1) + ";");
        stringBuilder.append(filePath + ";");
        stringBuilder.append(orientation + ";");
        orientation="1";

    }
    //cursor.close();
    return stringBuilder.toString();
}
4

2 に答える 2

1

私の理解が正しければ、あなたの画像はメディア データベースにありません。使用できます

ThumbnailUtils.extractTumbnail()

ビットマップのみが必要です。

于 2012-11-27T11:28:19.017 に答える
-1

やってみて。画像のサムネイルを ImageView に設定すると便利です。

 im=(ImageView)findViewById(R.id.imageView1);

    byte[] imageData = null;

    try 
    {

    final int THUMBNAIL_SIZE = 64;
    //InputStream is=getAssets().open("apple-android-battle.jpg");
    FileInputStream fis = new FileInputStream("/sdcard/apple.jpg");
    Bitmap imageBitmap = BitmapFactory.decodeStream(fis);

    Float width = new Float(imageBitmap.getWidth());
    Float height = new Float(imageBitmap.getHeight());
    Float ratio = width/height;
    imageBitmap = Bitmap.createScaledBitmap(imageBitmap, (int)(THUMBNAIL_SIZE * ratio), THUMBNAIL_SIZE, false);

    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    imageData = baos.toByteArray();
    im.setImageBitmap(imageBitmap);
    }
    catch(Exception ex) {

    }

それがあなたを助けることを願っています。

于 2012-11-27T11:26:57.557 に答える