답변:
최신 버전 인지 확인하십시오
implementation 'com.github.bumptech.glide:glide:4.10.0'
코 틀린 :
Glide.with(this)
.asBitmap()
.load(imagePath)
.into(object : CustomTarget<Bitmap>(){
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
imageView.setImageBitmap(resource)
}
override fun onLoadCleared(placeholder: Drawable?) {
// this is called when imageView is cleared on lifecycle call or for
// some other reason.
// if you are referencing the bitmap somewhere else too other than this imageView
// clear it here as you can no longer have the bitmap
}
})
비트 맵 크기 :
이미지의 원래 크기를 사용하려면 위와 같이 기본 생성자를 사용하십시오. 그렇지 않으면 원하는 비트 맵 크기를 전달할 수 있습니다
into(object : CustomTarget<Bitmap>(1980, 1080)
자바:
Glide.with(this)
.asBitmap()
.load(path)
.into(new CustomTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
imageView.setImageBitmap(resource);
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
}
});
기존 답변 :
와 compile 'com.github.bumptech.glide:glide:4.8.0'
아래
Glide.with(this)
.asBitmap()
.load(path)
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
imageView.setImageBitmap(resource);
}
});
내용은 compile 'com.github.bumptech.glide:glide:3.7.0'
아래
Glide.with(this)
.load(path)
.asBitmap()
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
imageView.setImageBitmap(resource);
}
});
이제 경고가 표시 될 수 있습니다 SimpleTarget is deprecated
이유:
SimpleTarget을 더 이상 사용하지 않는 주요 요점은 Glide의 API 계약을 위반하려는 유혹에 대해 경고하는 것입니다. 특히 SimpleTarget이 지워지면로드 한 리소스 사용을 강제로 중지하지 않아도되므로 충돌 및 그래픽 손상이 발생할 수 있습니다.
SimpleTarget
imageView가 지워지면 비트 맵을 사용하지 않는 한 여전히 스틸을 사용할 수 있습니다.
4.9.0
.asBitmap()
with(this)
해결되지 않은 경우에 넣어야 합니다.
글라이드에 익숙하지 않지만 목표 크기를 알고 있다면 다음과 같이 사용할 수 있습니다.
Bitmap theBitmap = Glide.
with(this).
load("http://....").
asBitmap().
into(100, 100). // Width and height
get();
통과 할 수있는 것처럼 보이고 -1,-1
전체 크기 이미지를 얻습니다 (순전히 테스트를 기반으로 문서화 된 것을 볼 수 없음).
참고 into(int,int)
다시 발생 FutureTarget<Bitmap>
하면 취재 시도-catch 블록이 포장 할 수 있도록, ExecutionException
그리고 InterruptedException
. 테스트되고 작동하는보다 완전한 예제 구현은 다음과 같습니다.
class SomeActivity extends Activity {
private Bitmap theBitmap = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// onCreate stuff ...
final ImageView image = (ImageView) findViewById(R.id.imageView);
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
Looper.prepare();
try {
theBitmap = Glide.
with(SomeActivity.this).
load("https://www.google.es/images/srpr/logo11w.png").
asBitmap().
into(-1,-1).
get();
} catch (final ExecutionException e) {
Log.e(TAG, e.getMessage());
} catch (final InterruptedException e) {
Log.e(TAG, e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(Void dummy) {
if (null != theBitmap) {
// The full bitmap should be available here
image.setImageBitmap(theBitmap);
Log.d(TAG, "Image loaded");
};
}
}.execute();
}
}
아래 주석에서 Monkeyless의 제안에 따라 (그리고 이것은 공식적인 방법 인 것처럼 보입니다 ) SimpleTarget
, 선택적으로 override(int,int)
코드를 단순화하기 위해 와 함께 사용할 수 있습니다 . 그러나이 경우 정확한 크기를 제공해야합니다 (1 미만의 항목은 허용되지 않음).
Glide
.with(getApplicationContext())
.load("https://www.google.es/images/srpr/logo11w.png")
.asBitmap()
.into(new SimpleTarget<Bitmap>(100,100) {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
image.setImageBitmap(resource); // Possibly runOnUiThread()
}
});
동일한 이미지가 필요한 경우 @hennry 가 제안한대로new SimpleTarget<Bitmap>()
Target.SIZE_ORIGINAL
-1 대신 비트 맵의 너비와 높이를 모두 전달 하는 것이 좋습니다.
SimpleTarget
과 같은 매개 변수를 제공하지 않으면 전체 크기 비트 맵 이 표시됩니다.new SimpleTarget<Bitmap>(){....}
그것은 재정과 같은 Target
클래스 또는 같은 구현 중 하나를 BitmapImageViewTarget
하고 무시 setResource
비트 맵이 갈 수있는 방법이 될 수 캡처 방법을 ...
이것은 테스트되지 않았습니다. :-)
Glide.with(context)
.load("http://goo.gl/h8qOq7")
.asBitmap()
.into(new BitmapImageViewTarget(imageView) {
@Override
protected void setResource(Bitmap resource) {
// Do bitmap magic here
super.setResource(resource);
}
});
최신 정보
이제 우리는 사용해야합니다 Custom Targets
샘플 코드
Glide.with(mContext)
.asBitmap()
.load("url")
.into(new CustomTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
}
});
글라이드를 사용하여 이미지를 비트 맵으로 다운로드하는 방법은 무엇입니까?
위의 모든 답변은 정확하지만 구식입니다.
글라이드의 새로운 버전에서 implementation 'com.github.bumptech.glide:glide:4.8.0'
코드에서 아래 오류를 찾을 수 있습니다
.asBitmap()
사용할 수 없습니다glide:4.8.0
SimpleTarget<Bitmap>
여기에 해결책이 있습니다
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.Request;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.SizeReadyCallback;
import com.bumptech.glide.request.target.Target;
import com.bumptech.glide.request.transition.Transition;
public class MainActivity extends AppCompatActivity {
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.imageView);
Glide.with(this)
.load("")
.apply(new RequestOptions().diskCacheStrategy(DiskCacheStrategy.NONE))
.into(new Target<Drawable>() {
@Override
public void onLoadStarted(@Nullable Drawable placeholder) {
}
@Override
public void onLoadFailed(@Nullable Drawable errorDrawable) {
}
@Override
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
Bitmap bitmap = drawableToBitmap(resource);
imageView.setImageBitmap(bitmap);
// now you can use bitmap as per your requirement
}
@Override
public void onLoadCleared(@Nullable Drawable placeholder) {
}
@Override
public void getSize(@NonNull SizeReadyCallback cb) {
}
@Override
public void removeCallback(@NonNull SizeReadyCallback cb) {
}
@Override
public void setRequest(@Nullable Request request) {
}
@Nullable
@Override
public Request getRequest() {
return null;
}
@Override
public void onStart() {
}
@Override
public void onStop() {
}
@Override
public void onDestroy() {
}
});
}
public static Bitmap drawableToBitmap(Drawable drawable) {
if (drawable instanceof BitmapDrawable) {
return ((BitmapDrawable) drawable).getBitmap();
}
int width = drawable.getIntrinsicWidth();
width = width > 0 ? width : 1;
int height = drawable.getIntrinsicHeight();
height = height > 0 ? height : 1;
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}
}
이것이 나를 위해 일한 것입니다 : https://github.com/bumptech/glide/wiki/Custom-targets#overriding-default-behavior
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.transition.Transition;
import com.bumptech.glide.request.target.BitmapImageViewTarget;
...
Glide.with(yourFragment)
.load("yourUrl")
.asBitmap()
.into(new BitmapImageViewTarget(yourImageView) {
@Override
public void onResourceReady(Bitmap bitmap, Transition<? super Bitmap> anim) {
super.onResourceReady(bitmap, anim);
Palette.generateAsync(bitmap, new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
// Here's your generated palette
Palette.Swatch swatch = palette.getDarkVibrantSwatch();
int color = palette.getDarkVibrantColor(swatch.getTitleTextColor());
}
});
}
});
비트 맵 변수에 동적 비트 맵 이미지를 할당하려는 경우
예 kotlin
backgroundImage = Glide.with(applicationContext).asBitmap().load(PresignedUrl().getUrl(items!![position].img)).into(100, 100).get();
위의 답변은 저에게 효과가 없었습니다.
.asBitmap
전에 있어야합니다 .load("http://....")
새 버전 업데이트
Glide.with(context.applicationContext)
.load(url)
.listener(object : RequestListener<Drawable> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<Drawable>?,
isFirstResource: Boolean
): Boolean {
listener?.onLoadFailed(e)
return false
}
override fun onResourceReady(
resource: Drawable?,
model: Any?,
target: com.bumptech.glide.request.target.Target<Drawable>?,
dataSource: DataSource?,
isFirstResource: Boolean
): Boolean {
listener?.onLoadSuccess(resource)
return false
}
})
.into(this)
오래된 답변
@ outlyer의 대답은 정확하지만 새로운 글라이드 버전에 약간의 변화가 있습니다
내 버전 : 4.7.1
암호:
Glide.with(context.applicationContext)
.asBitmap()
.load(iconUrl)
.into(object : SimpleTarget<Bitmap>(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) {
override fun onResourceReady(resource: Bitmap, transition: com.bumptech.glide.request.transition.Transition<in Bitmap>?) {
callback.onReady(createMarkerIcon(resource, iconId))
}
})
참고 :이 코드는 UI 스레드에서 실행되므로 AsyncTask, Executor 또는 동시성을 위해 @outlyer의 코드와 같은 다른 것을 사용할 수 있습니다. 원래 크기를 얻으려면 Target.SIZE_ORIGINA를 내 코드로 입력하십시오. -1, -1을 사용하지 마십시오
최신 버전 :
GlideApp.with(imageView)
.asBitmap()
.override(200, 200)
.centerCrop()
.load(mUrl)
.error(R.drawable.defaultavatar)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.signature(ObjectKey(System.currentTimeMillis() / (1000*60*60*24))) //refresh avatar cache every day
.into(object : CustomTarget<Bitmap>(){
override fun onLoadCleared(placeholder: Drawable?) {}
override fun onLoadFailed(errorDrawable: Drawable?) {
//add context null check in case the user left the fragment when the callback returns
context?.let { imageView.addImage(BitmapFactory.decodeResource(resources, R.drawable.defaultavatar)) }
}
override fun onResourceReady(
resource: Bitmap,
transition: Transition<in Bitmap>?) { context?.let { imageView.addImage(resource) } }
})