Glideへの入力としてビットマップを使用する方法を探しています。可能かどうかさえわかりません。サイズ変更のためです。 Glideには、スケールによる優れた画像強調機能があります。問題は、メモリに既にロードされているビットマップとしてリソースがあることです。私が見つけることができる唯一の解決策は、画像を一時ファイルに保存し、inputStream/fileとしてGlideに再ロードすることです。それを達成するより良い方法はありますか?
答える前にお願いします。Glideからの出力については話していません。.asBitmap().get()
私はそれを知っています。入力に関して助けが必要です。
私の回避策は次のとおりです。
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());
}
内部への画像の書き込みを避けて、再度ロードしたいので、ビットマップとして入力する方法があるかどうか尋ねています
ありがとう
バージョン4では、asBitmap()
の前にload()
を呼び出す必要があります
GlideApp.with(itemView.getContext())
.asBitmap()
.load(data.getImageUrl())
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {}
});
}
本当に奇妙なケースですが、解決してみましょう。古くてかっこよくないPicasso
を使用していますが、いつかGlideを試してみます。役立つリンクを次に示します。
そして実際には残酷ですが、私はこれを解決する効率的な方法だと思います:
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);
これがあなたに役立つかどうかはわかりませんが、それがあなたを解決策に近づけることを願っています。
このソリューションはGlide V4で機能しています。次のようなビットマップを取得できます。
Bitmap bitmap = Glide
.with(context)
.asBitmap()
.load(uri_File_String_Or_ResourceId)
.submit()
.get();
注:これにより、現在のスレッドがブロックされ、イメージがロードされます。
Glide
の最新バージョンによると、ほとんど変更はありません。 submit()
をクラス化しない場合、リスナーが呼び出されないので、submit()
を使用してビットマップとして画像をロードする必要があります。
ここに私が今日使用した実例があります。
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();
それは動作しており、リスナーからビットマップを取得しています。
受け入れられた答えは以前のバージョンでも機能しますが、新しいバージョンのGlideでは次を使用します。
RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(Android.R.drawable.waiting);
requestOptions.error(R.drawable.waiting);
Glide.with(getActivity()).apply(requestOptions).load(imageUrl).into(imageView);
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);
}
});
コトリンでは、
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)
上記の投稿に基づいて、価値があるもののために、私のアプローチ:
Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
Uri imageUri = Uri.withAppendedPath(sArtworkUri, String.valueOf(album_id));
次に、アダプターで:
// loading album cover using Glide library
Glide.with(mContext)
.asBitmap()
.load(imageUri)
.into(holder.thumbnail);
そのための実装を使用してください:
実装 '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) {
}
});