gpt4 book ai didi

android - 使用 Glide : Can't call reconfigure() on a recycled bitmap 加载图像时遇到错误

转载 作者:行者123 更新时间:2023-11-29 02:29:35 26 4
gpt4 key购买 nike

我遇到了错误

Can't call reconfigure() on a recycled bitmap

使用 Glide 库加载图像时。 5 次中有 1 次出现此错误。图片大小约为 1.5MB。

我使用的是 Glide 3.8.0 版本。

这是我的转换代码:

public class ScaleToFitWidthHeightTransform extends BitmapTransformation {
int mSize = AppConstants.HEIGHT_TRANSFORM_LIMIT; //1020
boolean isHeightScale;

public ScaleToFitWidthHeightTransform(Context context) {
super(context);
}

public Bitmap transform(Bitmap source) {
float scale;
int newSize;
int sourceHeight = source.getHeight();
int sourceWidth = source.getWidth();

// If original bitmap height/width is less then the height/width transform limit
// then no need to scale the bitmap, so return the original bitmap
if (sourceHeight < AppConstants.HEIGHT_TRANSFORM_LIMIT && sourceWidth < AppConstants.WIDTH_TRANSFORM_LIMIT) { // Height and width limit is 1020.
return source;
}
Bitmap scalBitmap;

if (sourceHeight > sourceWidth) {
scale = (float) AppConstants.HEIGHT_TRANSFORM_LIMIT / source.getHeight();
newSize = Math.round(source.getWidth() * scale);
scaleBitmap = Bitmap.createScaledBitmap(source, newSize, mSize, true);
} else {
scale = (float) AppConstants.WIDTH_TRANSFORM_LIMIT / source.getWidth();
newSize = Math.round(source.getHeight() * scale);
scaleBitmap = Bitmap.createScaledBitmap(source, mSize, newSize, true);
}
if (scaleBitmap != source) {
source.recycle();
}

return scaleBitmap;
}

@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return transform(toTransform);
}

@Override
public String getId() {
return "com.abc";
}

这是我使用 Glide 的行

        Glide.with(context)
.load(imageUri).asBitmap()
.transform(new ScaleToFitWidthHeightTransform(context))
.placeholder(defaultDrawable)
.error(defaultDrawable)
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
BitmapSourceData bitmapSourceData = null;
bitmapSourceData = new BitmapSourceData();
bitmapSourceData.setBitmapSource(getBitmapBytes(resource));

if (imageView != null) {
imageView.setImageBitmap(resource);
}
}

@Override
public void onLoadFailed(Exception e, Drawable errorDrawable) {
super.onLoadFailed(e, errorDrawable);
Log.e("ABC", "Exception --> " + e.toString());
}); // Here I am getting error printed.

我在网上搜索过。它说这是由于使用了回收的位图,但我无法修复它。那么我做错了什么?

最佳答案

你在这里回收了位图..

if (scaleBitmap != source) {
source.recycle();
}

不要这样做..

另外,createScaledBitmap 是一个非常繁重的操作,避免使用它。您可以使用 Canvas 和矩阵缩放位图。

关于android - 使用 Glide : Can't call reconfigure() on a recycled bitmap 加载图像时遇到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50332797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com