Я использую DroidX для разработки приложения, которое использует изображение предварительного просмотра камеры. Код, который я использую, можно найти во многих местах в Интернете, но я заметил, что общий метод «getBestPreviewSize (ширина, высота, камера. параметры )» возвращает такой маленький размер, что стандартный метод decodeYUV420SP не работает с исключение нулевого указателя.
Некоторая отладка показывает, что поддерживаемые PreviewSizes для моего DroidX:
Обратите внимание, что значения высоты и ширины дают пейзажную перспективу. Это не меняется в зависимости от ориентации камеры. Ширина и высота поверхности, переданной в 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 комбинаций этих попыток, похоже, не изменила это поведение.
Мои мысли состоят в том, чтобы просто обратить их вспять, но это кажется неправильным на многих уровнях. Поскольку этот свободно доступный код, кажется, зарекомендовал себя во многих других примерах, я, очевидно, неправильно подхожу к нему. Может ли кто-нибудь дать некоторое представление об этом поведении?
Заранее спасибо.