Почему разрешение изображения от Camera.PictureCallback () соответствует размеру PreviewSize? - PullRequest
1 голос
/ 06 февраля 2012

Я пытаюсь использовать Android Camera API, но когда я делаю снимок, его разрешение совпадает с разрешением PreviewSize объекта Camera.

Некоторый код для объяснения:

private Camera mCamera;
private Camera.PictureCallback mPictureCallback;

...
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
...
Camera.Parameters p = mCamera.getParameters();
        p.setPreviewSize(mPreviewWidth, mPreviewHeight);
        p.setPictureSize(mPictureWidth,mPictureHeight);
mCamera.setParameters(p);
...
}

public void onPictureTaken(byte[] imageData, Camera c) {
                Bitmap bitmapPicture = BitmapFactory.decodeByteArray(imageData, 0, imageData.length);
                bitmapPicture.getWidth(); //At this point the width is the same as mPreviewWidth and I want it to be mPictureWidth
}
/**
* This function is called when the user touches the surfaceview
*/
public void clickCamera(View v){
        mCamera.takePicture(null, mPictureCallback, mPictureCallback);
    }

Как я сказал в прокомментированной строке, вместо PreviewSize я хочу сделать снимок с картинкойSize, настроенной для моей камеры

1 Ответ

10 голосов
/ 07 февраля 2012

Ну, потратив некоторое время на отладку, я обнаружил, что было не так.

Дело в том, что вы можете установить размер изображения, только если ваш предварительный размер совместим с ним. Под совместимым я подразумеваю, что отношение aspec (отношение ширины к высоте) их разрешения одинаково.

Пример:

Широкоэкранное разрешение предварительного просмотра поддерживает только широкоэкранное разрешение.

Если вы установите неправильное разрешение для предварительного просмотра (широкоэкранного предварительного просмотра с обычным размером изображения), то размер изображения будет установлен неправильно.

я создал пример

preview 800 x 600
    2048 x 1536 [ ok ]
    1600 x 1200 [ ok ]
    800  x 600  [ ok ]
    2048 x 1232 [ fail - 2048 x 1536 ]
    1600 x 960  [ fail - 1600 x 1200 ]
    1024 x 600  [ fail - 1600 x 1200 ]

preview 1024 x 600
    2048 x 1536 [ fail - 2048 x 1232 ]
    1600 x 1200 [ fail - 2048 x 1232 ]
    800  x 600  [ fail - 1024 x 600  ]
    2048 x 1232 [ ok ]
    1600 x 960  [ ok ]
    1024 x 600  [ ok ]

Я надеюсь, что это поможет кому-то, кто столкнется с такой же проблемой в будущем.

...