Así que tengo un URI de una imagen que el usuario elige de las imágenes de su tarjeta SD. Y me gustaría mostrar una miniatura de esa imagen, porque obviamente, la imagen podría ser enorme y ocupar toda la pantalla. Alguien sabe como?Android: obtener una miniatura de la imagen en la tarjeta SD, dado Uri de la imagen original
Respuesta
Este código hará el trabajo:
Bitmap getPreview(URI uri) {
File image = new File(uri);
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);
}
Es posible que desee para calcular la potencia más cercana de 2 a utilizar para inSampleSize
, porque it's said a ser más rápido.
Creo que este código es la forma más rápida de generar miniaturas de archivos en la tarjeta SD:
public static Bitmap decodeFile(String file, int size) {
//Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeFile(file, o);
//Find the correct scale value. It should be the power of 2.
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = (int)Maths.pow(2, (double)(scale-1));
while (true) {
if (width_tmp/2 < size || height_tmp/2 < size) {
break;
}
width_tmp /= 2;
height_tmp /= 2;
scale++;
}
//Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeFile(file, o2);
}
Destil su escala no está subestimada, es 2 (escala-1). En Java: (int) Maths.pow (2, (double) (scale-1)) –
¡Gracias! Editado –
Creo que rompiste este código en tu edición, está usando la escala en su propia tarea. Además, no existe un paquete como "Matemáticas". –
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 la API nivel 8 Crea 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
Algunos tratando que no podía obtener la ruta de la imagen en miniatura de la SD. Estoy resuelto este problema al obtener un mapa de bits de la imagen de Android, antes de crear una vista de imagen en el adaptador para gridview (o donde lo necesite). Así que llamar al método imageView.setImageBitmap(someMethod(Context context, imageID))
Bitmap someMethod(Context context, long imageId){
Bitmap bitmap = Media.Images.Thumbnails.getThumbnail(context.getAplicationContext.getContentResolver(), imageid, MediaStore.Images.Thumbnails.MINI_KIND, null);
return bitmap;
}
Puede obtener ID de imagen de su SD usando esta guía (Get list of photo galleries on Android)
Si como HQ miniaturas, así que utilice [RapidDecoder] [1] biblioteca. Es simple de la siguiente manera:
import rapid.decoder.BitmapDecoder;
...
Bitmap bitmap = BitmapDecoder.from(getResources(), R.drawable.image)
.scale(width, height)
.useBuiltInDecoder(true)
.decode();
No se olvide de utilizar decodificador incorporado si desea reducir proporcionalmente inferior al 50% y un resultado HQ. he comprobado en el API de nivel 8 :)
- 1. consigo miniatura Uri/ruta de la imagen almacenada en la tarjeta SD + android versión
- 2. android obtener una miniatura de la imagen almacenada en una tarjeta SD cuya ruta se conoce
- 3. Android Guardar imagen en la tarjeta SD
- 4. Obtener imagen Uri + miniatura de la imagen tomada con la cámara en Android
- 5. Android: eliminar una imagen de la tarjeta SD
- 6. android leyendo una imagen de la tarjeta SD
- 7. Android: muestra la imagen de la tarjeta SD
- 8. Uso de la cámara sin tarjeta SD en Android
- 9. Android obtiene una ruta a la imagen desde la miniatura?
- 10. ¿Cómo obtener miniatura de galera para una carpeta de imagen particular en android?
- 11. Cómo guardar la imagen en la tarjeta SD en el botón Haga clic en android
- 12. Android obtener imagen de la galería Uri ruta
- 13. Ajusta la imagen grande en una pequeña imagen con la misma calidad que la imagen original?
- 14. Tienda de imagen de mapa de bits a la tarjeta SD en Android
- 15. Capture la imagen de la cámara frontal y guárdela en la tarjeta SD sin vista previa
- 16. Eliminar una carpeta en la tarjeta SD
- 17. Imagen Uri en bytesarray
- 18. Servicio de reinicio para la aplicación en la tarjeta SD Cuando se repone la tarjeta SD
- 19. obtener transmisión recibida cuando la tarjeta SD está desmontando android
- 20. imágenes en la tarjeta SD de acceso
- 21. Rendimiento de escritura de la tarjeta SD
- 22. Cargando dibujable desde la tarjeta SD
- 23. Escribiendo a la tarjeta SD
- 24. Cómo reproducir vídeos desde la tarjeta SD
- 25. Almacenamiento de datos en la tarjeta SD en Android
- 26. ¿Cómo transfiero una imagen de su URL a la tarjeta SD?
- 27. Android obtener solo la imagen de la galería
- 28. ¿Cómo puedo mostrar la imagen en la aplicación Android
- 29. Características de la tarjeta SD Android en Samsung Galaxy
- 30. ¿Cómo crear un archivo de imagen de tarjeta SD para el emulador de Android?
lo que es miniatura de tamaño del archivo –
El constructor (Uri) no está definido – hasanghaforian
una potencia de 2 para inSampleSize no más rápido, pero requiere es por el algoritmo. Tenga en cuenta que las imágenes pueden ser mucho más largas que THUMBNAIL_SIZE porque si, por ejemplo, 'inSampleSize = originalSize/THUMBNAIL_SIZE' es 7,' inSampleSize' se redondeará a 4, lo que le da un tamaño de originalSize/4, que es 1,75 veces el tamaño esperar por dimensión, es decir, 3 veces los píxeles. Este efecto aumenta rápidamente para tamaños de muestreo más grandes –