안녕하세요. 카메라 개발중에 해결이 되지 않는 문제가 있어 질문드립니다.

 

다름이 아니라

 

카메라관련 작업을 하고 있는데 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;
 }