2012-11-27 213 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