Я застрял со странной проблемой с растровым изображением, у меня есть некоторые изображения, сохраненные локально в моем приложении с слишком большой высотой, и я показываю изображения в виде imageview
которые поддерживают масштабирование и панорамирование. Что я делаю, так это то, что я получаю растровое изображение с помощью универсального загрузчика изображений, а затем загружаю это растровое изображение в виде imageview
. Теперь, если я показываю растровое изображение как есть, без масштабирования изображения, используя:
DisplayImageOptions opts = new
DisplayImageOptions.Builder().imageScaleType(ImageScaleType.NONE).build();
bitmap = ImageLoader.getInstance().loadImageSync(uri.toString(), opts);
тогда ничто не показывает в представлении imageview
но я получаю ошибку в logcat
:
W/OpenGLRenderer: растровое изображение слишком велико для загрузки в текстуру (686x7628, макс = 4096x4096)
и если я пытаюсь загрузить изображение с масштабированием, то качество изображения ухудшается, так как изображение содержит текст, только оно не читается.
Снимок экрана с устройства:
Исходное изображение:
Размер изображения составляет только 1,2 МБ, я не знаю, как с этим справиться, так как все библиотеки, которые я пытался снизить качество изображения до imageview
и если я пытаюсь загрузить растровое изображение непосредственно в imageview
оно не отображается. Любая помощь приветствуется.
Ну, я думаю, что библиотеки загрузки изображений не помогут вам с такими изображениями. Библиотека должна масштабировать исходное изображение для размера меньше максимального размера текстуры. Таким образом, эти длинные изображения значительно масштабируются, и получается нечитаемый текст. В вашем случае вы должны сами управлять загрузкой изображения: получить изображение и нарисовать его на холсте, возможно, по частям или как-то еще.
В любом случае, загрузка текста как изображения такого размера выглядит не очень хорошей идеей :)
Вы можете получить максимальный поддерживаемый размер для устройства, используя
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
вы должны учитывать эти размеры и соответственно устанавливать растровое изображение.