GetSupportedPreviewSize возвращает обратную ширину и высоту

Я использую DroidX для разработки приложения, которое использует изображение предварительного просмотра камеры. Код, который я использую, можно найти во многих местах в Интернете, но я заметил, что общий метод «getBestPreviewSize (ширина, высота, камера. параметры )» возвращает такой маленький размер, что стандартный метод decodeYUV420SP не работает с исключение нулевого указателя.

Некоторая отладка показывает, что поддерживаемые PreviewSizes для моего DroidX:

  • 144 x 176 Вт
  • 240 ч x 320 Вт
  • 288 x 352 Вт
  • 480 x 640 Вт
  • 480 x 720 Вт
  • 448 x 800 Вт
  • 720 x 1280 Вт

Обратите внимание, что значения высоты и ширины дают пейзажную перспективу. Это не меняется в зависимости от ориентации камеры. Ширина и высота поверхности, переданной в getBestSupportedPreviewSizes, составляют 480 x 778 h.

Когда я передаю camera.parameters в getBestSupportedPreviewSizes(), он возвращает размер 288 x 352. Вот код вызова -Прошу прощения, если формат не тот, но вот идет:

      if (!cameraConfigured) {
        Camera.Parameters parameters=camera.getParameters();
        Camera.Size size=getBestPreviewSize(pwidth, pheight, parameters);
        if (size!=null) {
          parameters.setPreviewSize(size.width, size.height);
          camera.setParameters(parameters);
          cameraConfigured=true;
        }
    }

pwidthи pheightвзяты из параметров ширины и высоты обратного вызова surfaceChanged. Я пробовал camera.setDisplayOrientation (90 ); в onResume (). Я также поставил ориентацию («Портрет» )в манифесте -, ни одна из 4 комбинаций этих попыток, похоже, не изменила это поведение.

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

Заранее спасибо.

5
задан Tim 30 June 2012 в 19:18
поделиться