glide resize android
¿Hay una manera de cargar la imagen como mapa de bits para Glide (7)
Estoy buscando una manera de usar bitmap como entrada para Glide. Incluso no estoy seguro de si es posible. Es para propósitos de cambio de tamaño. Glide tiene una buena mejora de imagen con escala. El problema es que tengo recursos como mapa de bits ya cargado en la memoria. La única solución que pude encontrar es almacenar las imágenes en un archivo temporal y volver a cargarlas en Glide como inputStream / file. ¿Hay una mejor manera de lograrlo?
Por favor, antes de responder ... No estoy hablando de la salida de Glide ... .asBitmap().get()
Lo sé. Necesito ayuda con la entrada.
Aquí está mi solución alternativa:
Bitmap bitmapNew=null;
try {
//
ContextWrapper cw = new ContextWrapper(ctx);
File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
File file=new File(directory,"temp.jpg");
FileOutputStream fos = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);
fos.close();
//
bitmapNew = Glide
.with(ctx)
.load(file)
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.into( mActualWidth, mActualHeight - heightText)
.get();
file.delete();
} catch (Exception e) {
Logcat.e( "File not found: " + e.getMessage());
}
Me gustaría evitar escribir imágenes en el interior y cargarlas de nuevo. Esa es la razón por la que pregunto si hay alguna forma de ingresar como mapa de bits.
Gracias
Aquí hay otra solución que le devuelve un mapa de bits para establecer en su ImageView
Glide.with(this)
.load(R.drawable.card_front) // you can pass url too
.asBitmap()
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
// you can do something with loaded bitmap here
imgView.setImageBitmap(resource);
}
});
Esta solución funciona con Glide V4. Puede obtener el mapa de bits como este:
Bitmap bitmap = Glide
.with(context)
.asBitmap()
.load(uri_File_String_Or_ResourceId)
.submit()
.get();
Nota: esto bloqueará el hilo actual para cargar la imagen.
Hay pequeños cambios según la última versión de Glide
. Ahora debemos usar submit()
para cargar la imagen como mapa de bits, si no hace una clase de submit()
, no se llamará al oyente.
Aquí está el ejemplo de trabajo que utilicé hoy.
<!-- begin snippet: js hide: false console: true babel: false -->
Glide.with(cxt)
.asBitmap().load(imageUrl)
.listener(new RequestListener<Bitmap>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object o, Target<Bitmap> target, boolean b) {
Toast.makeText(cxt,getResources().getString(R.string.unexpected_error_occurred_try_again),Toast.LENGTH_SHORT).show();
return false;
}
@Override
public boolean onResourceReady(Bitmap bitmap, Object o, Target<Bitmap> target, DataSource dataSource, boolean b) {
zoomImage.setImage(ImageSource.bitmap(bitmap));
return false;
}
}
).submit();
Está funcionando y estoy obteniendo bitmap del oyente.
La respuesta aceptada funciona para versiones anteriores, pero en las nuevas versiones de Glide use:
RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(android.R.drawable.waiting);
requestOptions.error(R.drawable.waiting);
Glide.with(getActivity()).apply(requestOptions).load(imageUrl).into(imageView);
Para la versión 4 tienes que llamar a asBitmap()
antes de load()
GlideApp.with(itemView.getContext())
.asBitmap()
.load(data.getImageUrl())
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {}
});
}
Más información: http://bumptech.github.io/glide/doc/targets.html
Para lo que vale, basado en las publicaciones anteriores, mi enfoque:
Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
Uri imageUri = Uri.withAppendedPath(sArtworkUri, String.valueOf(album_id));
luego en el adaptador:
// loading album cover using Glide library
Glide.with(mContext)
.asBitmap()
.load(imageUri)
.into(holder.thumbnail);
Un caso realmente extraño, pero tratemos de resolverlo. Estoy usando el antiguo y no genial Picasso
, pero un día intentaré con Glide. Aquí hay algunos enlaces que podrían ayudarte:
Y en realidad es una forma cruel pero eficiente de resolver esto:
ByteArrayOutputStream stream = new ByteArrayOutputStream();
yourBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
Glide.with(this)
.load(stream.toByteArray())
.asBitmap()
.error(R.drawable.ic_thumb_placeholder)
.transform(new CircleTransform(this))
.into(imageview);
No estoy seguro de si esto te ayudará, pero espero que pueda acercarte más a la solución.