안녕하세요. 카메라 개발중에 해결이 되지 않는 문제가 있어 질문드립니다.
다름이 아니라
카메라관련 작업을 하고 있는데 Preview 화면이 일그러지게나오는 겁니다....ㅠㅠ
(세로일때는 눌러져 보이고 가로일때는 길게보이는 현상...;;;)
프리뷰 화면은 XML 파일에서 정사각형으로 주었구요...(이것 때문인가 싶어서 이것저것 건들여 보았으나 별 반응이...;;;;)
어떻게 하면 Preview 화면이 일그러지지 않고 정상적으로 보일수 있을까요?
아래는 surfaceCreated 함수 부분 입니다.
public void surfaceCreated(SurfaceHolder holder) {
System.out.println("########## surfaceCreated called ");
{
mCamera = Camera.open();
Camera.Parameters parameters = mCamera.getParameters();
Camera.Size size = getBestPreviewSize(300, 300);
parameters.setPreviewSize(size.width, size.height);
mCamera.setParameters(parameters);
int picH = parameters.getPictureSize().height;
int picW = parameters.getPictureSize().width;
int preH = parameters.getPreviewSize().height;
int preW = parameters.getPreviewSize().width;
System.out.println("########## picH" +picH);
System.out.println("########## picW" +picW);
System.out.println("########## preH" +preH);
System.out.println("########## preW" +preW);
}
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
mCamera.release();
mCamera = null;
}
}
Camera.Size getBestPreviewSize(int width, int height) {
Camera.Size result = null;
Camera.Parameters p = mCamera.getParameters();
for (Camera.Size size : p.getSupportedPreviewSizes()) {
if (size.width <= width && size.height <= height) {
if (result == null) {
result = size;
} else {
int resultArea = result.width * result.height;
int newArea = size.width * size.height;
if (newArea > resultArea) {
result = size;
}
}
}
}
return result;
}
SurfaceView를 xml에서 만들지 말고 코드 상에서 생성한 다음,
FrameLayout 에 추가하는 형태로 해보시겠어요?
OpenCV 소스 보고 한건데 저는 되더라구요.
FrameLayout background = (FrameLayout) findViewById(R.id.layout_background);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
params.height = getWindowManager().getDefaultDisplay().getHeight(); // 원하는 높이
params.width = (int) (params.height * 4.0 / 2.88); // 원하는 너비
params.gravity = Gravity.CENTER; // 정렬
background.addView(/* SurfaceView */, params);
수고하세요 : )




저 같은 경우,
SurfaceView를 포함하는 Layout의 사이즈를 조절했더니 화면이 그 크기에 맞게 나오더군요.