2012-11-27 3 views
1

Fondamentalement, j'ai le chemin de l'image qui ressemble à ceci: /mnt/sdcard/Pictures/image.jpg Et je dois obtenir un chemin d'accès à la vignette, le plus rapidement possible.Comment obtenir un chemin de vignette à partir du chemin de l'image dans Android?

J'essaie d'utiliser MediaStore.Images.Thumbnails.queryMiniThumbnail, mais peu importe ce que je passe, j'obtiens un curseur null. Merci!

EDIT: C'est la fonction qui fournit TOUTES les trajectoires d'image et chemins de vignettes et les stocke dans une chaîne. Ce dont j'ai besoin, c'est d'une fonction qui retourne le chemin de la miniature pour un chemin d'image spécifique (/mnt/sdcard/Pictures/image.jpg). Merci

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

poster un code ... – njzk2

+0

queryMiniThumbnail est à utiliser sur une image déjà insérée – njzk2

Répondre

-1

Essayez-le. cela vous aidera à définir la miniature de l'image définie sur 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) { 

    } 

Espérons que cela va vous aider.

+1

quoi de réinventer la roue? ThumbnailsUtils fait cela pour vous. – njzk2

1

Si je comprends bien, votre image ne se trouve pas dans la base de données des médias. Vous pouvez utiliser

ThumbnailUtils.extractTumbnail() 

qui ne nécessite qu'une Bitmap.

+1

J'ai besoin de chemin pas l'image, l'image est là et la vignette aussi. . 'curseur curseur = MediaStore.Images.Thumbnails.queryMiniThumbnail (ctx \t \t \t \t .getActivity() getContentResolver(), ContentUris.parseId (Uri.parse ("file: //" + «/mnt/sdcard/Photos /image.jpg ")), \t \t \t \t MediaStore.Images.Thumbnails.MINI_KIND, null);' – Fossor

+0

L'URI attendu est celui fourni par le fournisseur de contenu multimédia. Les chances sont que votre image ne soit pas dans le fournisseur de contenu multimédia. Si c'est le cas, vous devez trouver son identifiant. – njzk2

+0

Merci. Pouvez-vous laisser tomber un indice sur la façon dont je trouve un identifiant à partir d'un chemin d'image donné? – Fossor

Questions connexes