2012-11-27 149 views
1

基本上我有图像路径,看起来像这样:/mnt/sdcard/Pictures/image.jpg 而我需要以最快的方式从它得到一个缩略图的路径。如何从android中的图像路径获取缩略图路径?

我想使用MediaStore.Images.Thumbnails.queryMiniThumbnail,但不管我通过什么我得到空游标。 谢谢!

编辑: 这是一个函数,带来所有的图像路径和缩略图路径,并将它们存储在一个字符串。我需要的是一个返回特定图像路径缩略图路径的函数(/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(); 
} 
+0

发表了一些代码... – njzk2

+0

queryMiniThumbnail将用于已经插入的图像 – njzk2

回答

-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) { 

    } 

希望它能帮助你。

+1

什么是重新发明轮子? ThumbnailsUtils为你做到了这一点。 – njzk2

1

如果我理解正确,您的图像不在媒体数据库中。你可以使用

ThumbnailUtils.extractTumbnail() 

它只需要一个位图。

+1

我需要的路径不是图像,图像在那里,缩略图也。 。 '光标光标= MediaStore.Images.Thumbnails.queryMiniThumbnail(CTX \t \t \t \t .getActivity()getContentResolver(),ContentUris.parseId(Uri.parse( “文件://” +“的/ mnt/SD卡/图片/image.jpg“)), \t \t \t \t MediaStore.Images.Thumbnails.MINI_KIND,null);' – Fossor

+0

预期的URI是来自媒体内容提供者的URI。机会是你的形象不在媒体内容提供商。如果是这样,你需要找到它的ID。 – njzk2

+0

谢谢。你能否提示我如何从给定的图像路径中找到id? – Fossor