2011-02-10 1 views
3

Я хотел бы захватить изображение с помощью камеры Android, но поскольку изображение может содержать конфиденциальные данные, я не хочу, чтобы изображение сохранялось на телефоне или SD-карте. Вместо этого мне нужна строка base64 (сжатая), которая будет немедленно отправлена ​​на серверКак захватить изображение камеры Android без сохранения файла на телефон/SD-карту?

В PhoneGap кажется, что файлы сохраняются в разных местах автоматически. На самом деле я никогда не мог получить поток изображений - в onJpegPictureTaken() параметр byte [] всегда был нулевым.

Может ли кто-нибудь предложить способ?

ответ

1

См. Camera.onPreviewFrame() и YuvImage.compresstoJpeg(), чтобы получить массив байтов, который вы можете преобразовать в растровое изображение.

Обратите внимание, что YuvImage.compressToJpeg() доступен только в SDK 8 или более поздней версии, я думаю. Для более ранних версий вам понадобится реализовать собственный декодер YUV. Есть несколько примеров, или я мог бы привести вам пример.

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

Удачи вам!

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