2011-12-05 28 views
15

Supongamos que tengo una imagen almacenada en la ruta "/mnt/images/abc.jpg". ¿Cómo obtengo el mapa de bits en miniatura generado por el sistema para esta imagen? Yo sé cómo conseguir la miniatura de una imagen de su Uri, pero no de su file-pathandroid obtener una miniatura de la imagen almacenada en una tarjeta SD cuya ruta se conoce

+1

Usted puede simplemente crear miniatura de vídeo y la imagen usando la clase de Java ThumnailUtil Bitmap redimensionado = ThumbnailUtils.extractThumbnail (BitmapFactory.decodeFile (file.getPath()), anchura, altura); –

Respuesta

4

se puede obtener el Uri de un archivo de la siguiente manera:

Uri uri = Uri.fromFile(new File("/mnt/images/abc.jpg")); 
Bitmap thumbnail = getPreview(uri); 

Y la siguiente function que la da miniatura:

Bitmap getPreview(Uri uri) { 
    File image = new File(uri.getPath()); 

    BitmapFactory.Options bounds = new BitmapFactory.Options(); 
    bounds.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(image.getPath(), bounds); 
    if ((bounds.outWidth == -1) || (bounds.outHeight == -1)) 
     return null; 

    int originalSize = (bounds.outHeight > bounds.outWidth) ? bounds.outHeight 
      : bounds.outWidth; 

    BitmapFactory.Options opts = new BitmapFactory.Options(); 
    opts.inSampleSize = originalSize/THUMBNAIL_SIZE; 
    return BitmapFactory.decodeFile(image.getPath(), opts);  
} 
+8

Creo que usar 'MediaStore.Images.Thumbnails.getThumbnail (getContentResolver(), Long.parseLong (_imageUri.getLastPathSegment()), tipo, nulo);' sería una mejor opción, ya que el sistema la mayoría de las veces almacena en caché el thumbnails – pankajagarwal

+0

@frieza Estoy de acuerdo. – Caner

+1

su método para obtener el uri no parece funcionar correctamente porque para un archivo con ruta "/ mnt/sdcard/2011-12-02 11.22.50.jpg" el uri real es ontent: // media/external/images/media/556 donde como el método Uri.fromFile (...) devuelve el archivo: ///mnt/sdcard/2011-12-02%2011.22.50.jpg – pankajagarwal

21

Usted puede tratar con esto:

public static Bitmap getThumbnail(ContentResolver cr, String path) throws Exception { 

    Cursor ca = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[] { MediaStore.MediaColumns._ID }, MediaStore.MediaColumns.DATA + "=?", new String[] {path}, null); 
    if (ca != null && ca.moveToFirst()) { 
     int id = ca.getInt(ca.getColumnIndex(MediaStore.MediaColumns._ID)); 
     ca.close(); 
     return MediaStore.Images.Thumbnails.getThumbnail(cr, id, MediaStore.Images.Thumbnails.MICRO_KIND, null); 
    } 

    ca.close(); 
    return null; 

} 
+1

Gracias, funciona perfecto – lukas

+0

gracias señor! y obvio, pero alguien podría necesitarlo, si quiere mostrar imágenes más grandes, use MediaStore.Images.Thumbnails.MINI_KIND – keybee

+0

La mejor solución que he encontrado.Muchas gracias, esto debería ser una respuesta aceptada. – Tunerx

4

Podría ser un maneras alternativas como otro ya había mencionado en su respuesta, pero Fácil manera que he encontrado para conseguir miniatura está utilizando ExifInterface

ExifInterface exif = new ExifInterface(pictureFile.getPath()); 
    byte[] imageData=exif.getThumbnail(); 
    if (imageData!=null) //it can not able to get the thumbnail for very small images , so better to check null 
    Bitmap thumbnail= BitmapFactory.decodeByteArray(imageData,0,imageData.length); 
+0

En algunos casos, no es trabajo. No es mejor que obtener de Image Store como en la respuesta aceptada. –

+0

Yaa cuando BitmapFactory no puede decodificar la matriz de bytes solo entonces. – dhams

1

Usted puede simplemente crear miniatura de vídeo y la imagen usando la clase ThumnailUtil de java

Bitmap resized = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(file.getPath()), width, height); 


public static Bitmap createVideoThumbnail (String filePath, int kind) 

Agregado en el nivel de API 8 Cree una miniatura de video para un video. Puede devolver nulo si el video está dañado o el formato no es compatible.

Parámetros rutaArchivo la ruta del archivo de vídeo tipo podría MINI_KIND o MICRO_KIND

For more Source code of Thumbnail Util class

Developer.android.com

0

uso androide de la clase Bitmap y su createScaledBitmap método.

método Descroption:

public static Bitmap createScaledBitmap (Bitmap src, int dstWidth, int dstHeight, boolean filter) 

ejemplo del uso:

Bitmap bitmap = BitmapFactory.decodeFile(img_path); 
int origWidth = bitmap.getWidth(); 
int origHeight = bitmap.getHeight(); 
bitmap = Bitmap.createScaledBitmap(bitmap, origWidth/10, origHeight/10, false); 

disminución del archivo de origen como usted desee. En mi ejemplo lo reduje 10 veces.

Cuestiones relacionadas