Je cherche un moyen d'utiliser bitmap comme entrée de Glide. Je ne sais même pas si c'est possible. C'est à des fins de redimensionnement. Glide a une bonne amélioration de l'image avec l'échelle. Le problème est que j'ai des ressources en tant que bitmap déjà chargées en mémoire. La seule solution que je pourrais trouver est de stocker les images dans un fichier temporaire et de les recharger de nouveau dans Glide en tant que inputStream/file. Existe-t-il un meilleur moyen de réaliser cela?
S'il vous plaît avant de répondre .. Je ne parle pas de sortie de Glide .. .asBitmap().get()
Je sais que.J'ai besoin d'aide avec entrée.
Voici ma solution de contournement:
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());
}
J'aimerais éviter d'écrire des images en interne et de les charger à nouveau. C'est pourquoi je demande s'il est possible d'avoir une entrée en tant que bitmap
Merci
Pour la version 4, vous devez appeler asBitmap()
avant load()
GlideApp.with(itemView.getContext())
.asBitmap()
.load(data.getImageUrl())
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {}
});
}
Plus d'infos: http://bumptech.github.io/glide/doc/targets.html
Un cas vraiment étrange, mais essayons de le résoudre. J'utilise l'ancien et pas cool Picasso
, mais un jour je vais essayer Glide. Voici quelques liens qui pourraient vous aider:
Et en fait, un moyen cruel mais efficace de résoudre ce problème:
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);
Je ne sais pas si cela vous aidera, mais j'espère que cela pourra vous rapprocher de la solution.
Cette solution fonctionne avec Glide V4. Vous pouvez obtenir le bitmap comme ceci:
Bitmap bitmap = Glide
.with(context)
.asBitmap()
.load(uri_File_String_Or_ResourceId)
.submit()
.get();
Remarque: ceci bloquera le fil actuel pour charger l'image.
Il y a peu de changements selon la dernière version de Glide
. Nous devons maintenant utiliser submit()
pour charger l'image en tant que bitmap. Si vous ne classez pas submit()
, le programme d'écoute ne sera pas appelé.
voici l'exemple de travail que j'ai utilisé aujourd'hui.
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();
Cela fonctionne et j'obtiens un bitmap d'auditeur.
La réponse acceptée fonctionne pour les versions précédentes, mais dans les nouvelles versions de Glide, utilisez:
RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(Android.R.drawable.waiting);
requestOptions.error(R.drawable.waiting);
Glide.with(getActivity()).apply(requestOptions).load(imageUrl).into(imageView);
voici une autre solution qui vous retourne un bitmap à définir dans votre 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);
}
});
À Kotlin,
Glide.with(this)
.asBitmap()
.load("https://...")
.addListener(object : RequestListener<Bitmap> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<Bitmap>?,
isFirstResource: Boolean
): Boolean {
Toast.makeText(this@MainActivity, "failed: " + e?.printStackTrace(), Toast.LENGTH_SHORT).show()
return false
}
override fun onResourceReady(
resource: Bitmap?,
model: Any?,
target: Target<Bitmap>?,
dataSource: DataSource?,
isFirstResource: Boolean
): Boolean {
//image is ready, you can get bitmap here
return false
}
})
.into(imageView)
Pour ce qui vaut la peine, sur la base des posts ci-dessus, mon approche:
Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
Uri imageUri = Uri.withAppendedPath(sArtworkUri, String.valueOf(album_id));
puis dans l'adaptateur:
// loading album cover using Glide library
Glide.with(mContext)
.asBitmap()
.load(imageUri)
.into(holder.thumbnail);
S'il vous plaît utiliser la mise en œuvre pour cela est:
implémentation 'com.github.bumptech.glide: glide: 4.9.0'
Glide.with(this)
.asBitmap()
.load(item.getMarkertOverlayImage())
.into(new CustomTarget <Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition <? super Bitmap> transition) {
// you can do something with loaded bitmap here
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
}
});