Полноэкранный предварительный просмотр камеры без искажения/растяжения

У меня есть класс cameraPreview (см. ниже), который запускает полноэкранный режим и альбомную ориентацию... но изображение растягивается/искажается... есть ли способ заставить этот предварительный просмотр оставаться в полноэкранном режиме а не искажать?

camLayer:

public class CamLayer extends SurfaceView implements SurfaceHolder.Callback {
       Camera camera;
       SurfaceHolder previewHolder;
       String camID;
       private static final String TAG = "Cam Preview";


       public CamLayer(Context context, String facing)
       {
               super(context);
               camID = facing;
               previewHolder = this.getHolder();
               previewHolder.addCallback(this);
               previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);


       }
       public void surfaceCreated(SurfaceHolder holder) {
           startCamera();
       }

       @Override
       public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
       {
               Parameters params = camera.getParameters();
                   //params.setPreviewSize(width, height);
                   //params.setPictureFormat(PixelFormat.JPEG);
                   camera.setParameters(params);
                   camera.startPreview();


       }

       public void surfaceDestroyed(SurfaceHolder arg0)
       {

            stopCamera();
       }



       public void onResume() {

           startCamera();

       }

       public void onPause() {

           stopCamera();
       }


       public void stopCamera(){
            System.out.println("stopCamera method");
            if (camera != null){
                camera.stopPreview();
                camera.setPreviewCallback(null);
                camera.release();
                camera = null;
                previewHolder.removeCallback(this);
                previewHolder = null;
            }
        }

       private void startCamera(){
           if(camID.equals("front")){
               camera=Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
           }else{
               camera=Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);
           }
           try {
                   camera.setPreviewDisplay(previewHolder);

                }
                   catch (Throwable e){ Log.w("TAG,", "failed create surface !?!?"); }
        }

       public void draw(Canvas canvas) {
           super.draw(canvas);
           Paint p = new Paint(Color.RED);
           Log.d(TAG, "draw");
           canvas.drawText("PREVIEW", canvas.getWidth() / 2,
                canvas.getHeight() / 2, p);
        }
}
7
задан erik 28 March 2012 в 21:10
поделиться