Загрузка растрового изображения со слишком большой высотой в Android ImageView - PullRequest
1 голос
/ 04 апреля 2019

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

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

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

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

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

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

enter image description here

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

enter image description here

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

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

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

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

0 голосов
/ 04 апреля 2019

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

 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 вы должны учитывать эти размеры и соответственно установить битовую карту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...