iOrange
@iOrange

Android SDK: как получить несжатую фотографию?

Добрый день!

Пишу приложение под Android которое должно получать фотографию и обрабатывать ее особым образом. В доках вычитал что takePicture у класса Camera в качестве параметров принимает callback'и, в которые потом передаются данные полученные во время съемки (rawCallback и jpegCallback).
В результате экспериментов выяснилось что в jpegCallback стабильно приходит готовый JPEG файл, который можно тут же записывать на флешку, а вот в rawCallback приходит null. Гугление не помогает. Вариант распаковывать JPEG и работать с ним не подходит по многим параметрам (скорость, качество и т.д.)

Подскажите пожалуйста как быть?

PS. Тестировалось на Google Nexus ONE и HTC Desire.
PSS. Прилагаю вырезку из кода:
public void TakePicture()
{
 if (m_Camera != null && m_CanDoPhoto)
 {
  m_CanDoPhoto = false;
  m_Camera.takePicture(shutterCallback, rawCallback, jpegCallback);
 }
}

PictureCallback rawCallback = new PictureCallback()
{
 public void onPictureTaken(byte[] _data, Camera _camera)
 {
  String path = Environment.getExternalStorageDirectory().toString();
  File file = new File(path, "MyTestPhoto.raw");
  try
  {
   FileOutputStream fOut = new FileOutputStream(file);
   fOut.write(_data);
   fOut.flush();
   fOut.close();
  }
  catch (FileNotFoundException e)
  {
   e.printStackTrace();
  }
  catch (IOException e)
  {
   e.printStackTrace();
  }
 }
 }
};

PictureCallback jpegCallback = new PictureCallback()
{
 public void onPictureTaken(byte[] _data, Camera _camera)
 {
  m_CanDoPhoto = true;
  m_Camera.startPreview();
 }
};
  • Вопрос задан
  • 3100 просмотров
Решения вопроса 1
apangin
@apangin
Тут есть ответ непосредственно от разработчика Android:
groups.google.com/group/android-developers/browse_thread/thread/65191ea020f6bb27/

Вкратце, rawCallback никогда не работал и, скорее всего, не будет.
Такого рода коллбэки не предназначались для обработки сигналов, а лишь для получения снимков.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
apangin
@apangin
Боюсь, что так. В несжатом виде доступно только превью (всякие сканнеры штрих-кодов и т.п. используют именно preview callbacks).
Ответ написан
@stepango
В несжатом виде вам никто изображение не отдаст из-за ограничение по выделяемому объему памяти для приложения. Несжатая картинка 5Мп без сжатия будет весить порядка 40мб в то время как на desire ограничение на одно приложение 24мб.
Ответ написан
iOrange
@iOrange Автор вопроса
То есть, получается что получить «сырое» изображение с камеры нельзя? Только в виде уже сжатого JPEG?
А нет ни каких обходных путей? Может с помощью Native SDK?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы