В сущности это то, что я хочу сделать:
Я хочу загрузить область размером 100x100 (любую часть) 5-мегапиксельного изображения в класс растрового изображения Android, чтобы я мог нарисовать его на элементе canvas
Это так просто. Это все, что я хочу сделать. Это оно. Ничего более. Не меньше. Звучит достаточно просто. Поэтому, прежде чем ухмыльнуться на лице, читайте дальше.
Я понимаю, что этот вопрос уже задавался миллион раз. И я также сделал свою домашнюю работу, исследуя ее. К сожалению, я зашел в тупик со всех сторон. Может быть, мне нужно прояснить свой вопрос.
Существует ограничение на объем кучи, которую виртуальная машина Android позволяет выделять. Поэтому загрузка большого растрового изображения, даже с собственной камеры (у меня есть Nexus S), невозможна при использовании следующей функции.
BitmapFactory.decodeStream(InputStream is)
Да, я могу масштабировать его, используя BitmapFactory.Options , но как мне тогда увеличить изображение?
Теперь я пытаюсь создать средство просмотра изображений, которое может плавно увеличивать / уменьшать изображение. Очевидно, что это невозможно, даже если я не могу загрузить изображение.
В gingerbread у нас есть новый класс BitmapRegionDecoder , но я разрабатываю свое приложение для Froyo. Все эти классы имеют хуки в нативный API, которые используют Skia 2D Graphics Library . Android NDK также не предоставляет доступ к этим API. Возможно, есть способ собрать Skia вручную и использовать его для загрузки растрового изображения Java. Но я не уверен, как?
Кажется, это уже решено (http://blog.javia.org/how-to-work-around-androids-24-mb-memory-limit/) в этом приложении - https://market.android.com/details?id=image.viewer с использованием памяти, выделенной в собственном коде C, с использованием malloc / new . не могу понять, как?
Итак, проясните ситуацию, я хочу увеличить / уменьшить изображение до полного разрешения. Если возможно, это должно быть гладко или, по крайней мере, это может быть сделано в отдельном потоке.
Если мне нужно использовать OpenGL, пожалуйста, дайте мне также пример кода.