Загрузка растрового изображения со слишком большой высотой в Android ImageView

1

Я застрял со странной проблемой с растровым изображением, у меня есть некоторые изображения, сохраненные локально в моем приложении с слишком большой высотой, и я показываю изображения в виде imageview которые поддерживают масштабирование и панорамирование. Что я делаю, так это то, что я получаю растровое изображение с помощью универсального загрузчика изображений, а затем загружаю это растровое изображение в виде imageview. Теперь, если я показываю растровое изображение как есть, без масштабирования изображения, используя:

DisplayImageOptions opts = new 
DisplayImageOptions.Builder().imageScaleType(ImageScaleType.NONE).build();
bitmap = ImageLoader.getInstance().loadImageSync(uri.toString(), opts);

тогда ничто не показывает в представлении imageview но я получаю ошибку в logcat:

W/OpenGLRenderer: растровое изображение слишком велико для загрузки в текстуру (686x7628, макс = 4096x4096)

и если я пытаюсь загрузить изображение с масштабированием, то качество изображения ухудшается, так как изображение содержит текст, только оно не читается.

Снимок экрана с устройства:

Изображение 174551

Исходное изображение:

Изображение 174551

Размер изображения составляет только 1,2 МБ, я не знаю, как с этим справиться, так как все библиотеки, которые я пытался снизить качество изображения до imageview и если я пытаюсь загрузить растровое изображение непосредственно в imageview оно не отображается. Любая помощь приветствуется.

Теги:
android-bitmap
android-glide
picasso
universal-image-loader

2 ответа

0

Ну, я думаю, что библиотеки загрузки изображений не помогут вам с такими изображениями. Библиотека должна масштабировать исходное изображение для размера меньше максимального размера текстуры. Таким образом, эти длинные изображения значительно масштабируются, и получается нечитаемый текст. В вашем случае вы должны сами управлять загрузкой изображения: получить изображение и нарисовать его на холсте, возможно, по частям или как-то еще.

В любом случае, загрузка текста как изображения такого размера выглядит не очень хорошей идеей :)

  • 0
    Спасибо за ваш ответ. Можете ли вы поделиться идеей или любой полезной ссылкой, как получить изображение и нарисовать его на холсте. Я пытался, но безуспешно до сегодняшнего дня.
0

Вы можете получить максимальный поддерживаемый размер для устройства, используя

 val canvas = Canvas()
    canvas.getMaximumBitmapHeight()
    canvas.getMaximumBitmapWidth()

Согласно документу

Для высоты

/**
 * Returns the maximum allowed height for bitmaps drawn with this canvas.
 * Attempting to draw with a bitmap taller than this value will result
 * in an error.
 *
 * @see #getMaximumBitmapWidth()
 */
public int getMaximumBitmapHeight() {
    return MAXMIMUM_BITMAP_SIZE;
}

Для ширины

 /**
 * Returns the maximum allowed width for bitmaps drawn with this canvas.
 * Attempting to draw with a bitmap wider than this value will result
 * in an error.
 *
 * @see #getMaximumBitmapHeight()
 */
public int getMaximumBitmapWidth() {
    return MAXMIMUM_BITMAP_SIZE;
}

Поэтому при настройке Bitmap вы должны учитывать эти размеры и соответственно устанавливать растровое изображение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню