Возникла ошибка при загрузке изображения с использованием Glide: не удалось вызвать функциюconfigure () для переработанного растрового изображения - PullRequest
0 голосов
/ 14 мая 2018

Я получаю ошибку

Невозможно вызватьconfigure () для переработанного растрового изображения

при загрузке изображения с помощью библиотеки Glide. 1 из 5 раз я получаю эту ошибку. Размер изображения составляет около 1,5 МБ.

Я использую 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.

Я искал в сети. Он говорит, что это связано с использованием переработанного растрового изображения, но я не могу это исправить. Так что я не так делаю ??

1 Ответ

0 голосов
/ 14 мая 2018

Вы переработали растровое изображение здесь ..

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

Не делай этого ..

Также createScaledBitmap - очень тяжелая операция, избегайте ее использования. Вы можете масштабировать растровое изображение, используя холст и матрицу.

...