Vista previa de la cámara Android: relación de aspecto 1: 1, ¿cómo?
Hola Estoy intentando utilizar la cámara para capturar una imagen en una de mis aplicaciones. Lo que es especial es que necesito un área cuadrada de vista previa (y una foto al final). Traté de definir el tamaño de la imagen y la vista previa a 1: 1 proporciones de píxeles, pero nada de costuras para trabajar. No importa lo que haga la imagen se ve "aplastado" en un cuadrado.
Cualquier persona que tiene alguna idea sobre cómo resolver esto?
código:
public class AddFromCameraActivity extends Activity implements SurfaceHolder.Callback { private Camera mCamera; private Parameters mParameters; private SurfaceView mCameraPreview; private SurfaceHolder mSurfaceHolder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.addimagefromcameramain); initialise(); //Testing area mCamera = Camera.open(); mParameters = mCamera.getParameters(); mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO); mParameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); mParameters.setJpegQuality(50); mParameters.setJpegThumbnailQuality(50); mParameters.setPictureSize(1024, 1024); //mParameters.setPreviewFormat(ImageFormat.JPEG); mParameters.setJpegThumbnailSize(256, 256); mParameters.setPreviewSize(500, 500); mCamera.setParameters(mParameters); } private void initialise() { mCameraPreview = (SurfaceView)findViewById(R.id.cameraSurfaceView); mSurfaceHolder = mCameraPreview.getHolder(); mSurfaceHolder.addCallback(this); mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); mSurfaceHolder.setFixedSize(500, 500); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { try { mCamera.setPreviewDisplay(mSurfaceHolder); mCamera.startPreview(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void surfaceDestroyed(SurfaceHolder holder) { mCamera.stopPreview(); mCamera.release(); } @Override public void onPause() { mCamera.release(); } }
Gracias
Puedes echar un vistazo al código de ejemplo de CameraPreview del SDK de Android. El método getOptimalPreviewSize
muestra cómo tratar diferentes tamaños de cámara y el método onLayout
muestra cómo configurar la superficie de vista previa en la actividad.