2016-02-24 4 views
0

Я новичок в Android, но сделал некоторые работы с iOS. Я получаю сообщение об ошибке при загрузке растрового изображения из изображения камеры на Samsung S4 (4.4.4):Android - загрузка больших растровых изображений в TouchImageView

bmp = BitmapFactory.decodeFile(photoFilePath, options); 

imgView.setImageBitmap(bmp); 

Здесь imgView является TouchImageView. (Я попытался с помощью ImageViewZoom, но не могу заставить его импортировать в AndroidStudio.)

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

W/OpenGLRenderer: Bitmap too large to be uploaded into a texture (4128x3096, max=4096x4096) 

Исходя из прошивки Я удивлен, что Android не может загрузить изображение с телефоном, так собственная камера! Надеюсь, это не так сложно. Это должно быть возможно, поскольку галерея, похоже, может это сделать. Примеры, которые я вижу в Интернете (предположим, что вы подвыбрали изображение), похоже, не соответствуют точке. С панорамированием и масштабированием (который должен быть встроен в ImageView) изображение представляет собой просто меньшее окно в гораздо большем изображении. Вам не нужно подстраивать растровое изображение к размеру пикселя представления. Я боюсь, что этот глупый совет (подвыборки) отражает серьезный недостаток Android.

ответ

0

Я считаю, что сообщение об ошибке связано с OpenGL, а не с Android. GPU может устанавливать ограничения на максимальное разрешение текстуры. Для вашего случая это 4096x4096 пикселей. Разработчикам рекомендуется загружать уменьшенную версию в пользовательский интерфейс, потому что не представляется разумным просматривать большое изображение на ограниченном экране, например, на телефоне. Более подробную информацию об этом можно найти here.

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

+0

iPhone является телефоном и не имеет таких ограничений. –

+0

Android, так как Honeycomb использует аппаратное ускорение GPU для отображения всего, что отображается на экране. Итак, 'Просмотр' в основном просто 3D-многоугольник с текстурой, прикрепленной к нему. Это делает Android в основном прозрачным для разработчиков, которые в iOS, AFAIK, это не так. –

0

Я думаю, что ответ «нелегкий путь». Я подозревал это, но должен был проверить, чтобы убедиться. Я обнаружил, что установка android:hardwareAccelerated = "false" в манифесте позволила загружать большие растровые изображения, но вскоре приложение вскоре вышло из памяти. Интересно, что отсутствие аппаратного ускорения, похоже, не сильно повлияло на производительность.

0

Моя библиотека предназначена для решения этой проблемы, она сначала подвыражает изображение, а затем загружает плитки с более высоким разрешением, когда вы увеличиваете масштаб. Если вы посмотрите внимательно, вы увидите, что большинство приложений для Android-галерей делают то же самое.

https://github.com/davemorrissey/subsampling-scale-image-view

+0

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

Смежные вопросы