Это может звучать как странный/глупый вопрос. Но выслушай меня.
Приложения для Android, по крайней мере, на T-Mobile G1, ограничены 16 мегабайтами кучи.
И для хранения изображения требуется 4 байта на пиксель (в форме растрового изображения):
public void onPictureTaken(byte[] _data, Camera _camera) {
Bitmap temp = BitmapFactory.decodeByteArray(_data, 0, _data.length);
}
Таким образом, 1 изображение с разрешением 6 мегапикселей занимает 24 МБ кучи. (Переполнение памяти Cue).
Теперь я очень хорошо знаю о возможности декодирования с параметрами, чтобы эффективно уменьшить размер изображения. У меня даже есть метод, который уменьшит его до желаемого размера.
Но как насчет сценария, когда я хочу использовать камеру как качественную камеру!
Я не знаю, как получить этот образ в базе данных. Как только я декодирую, это ошибки.
Примечание. Мне нужно (?) Преобразовать его в Bitmap, чтобы я мог повернуть его перед сохранением.
Итак, подведем итог:
Это не касается проблемы, но я рекомендую ее как отправную точку для других, которые просто загружают изображения из местоположения: Отображение растровых изображений на Android
Я могу только подумать о нескольких вещах, которые могут помочь, ни один из них не является оптимальным
Выполняйте серверные операции вращения
Храните данные из захвата непосредственно в SDCARD без его декодирования, затем вращайте его куском с помощью файловой системы, а затем отправляйте ее в свою БД. Множество примеров в Интернете (если ваши углы просты, 90 180 и т.д.), Хотя это потребует много времени, поскольку операции ввода-вывода с SDCARD выполняются не очень быстро.
Когда вы декодируете падение альфа-канала, это может не решить проблему, и если вы используете матрицу для поворота изображения, тогда вам понадобится цель/источник в любом случае
Опции opt = new Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
//Декодируем необработанную камеру растровым изображением без альфа-канала
bmp = BitmapFactory.decodeByteArray(raw, 0, raw.length, opt);
Там может быть лучший способ сделать это, но так как ваше устройство настолько ограничено в куче и т.д. Я не могу думать ни о чем.
Было бы неплохо, если бы был факультативный матричный метод на основе файлов (который в целом является тем, что я предлагаю как вариант 2), или какой-то "пейджинговой" системой для Android, но это лучшее, что я могу придумать.
Сначала сохраните его в файловой системе, выполните свои операции с файлом из файловой системы...