2011-05-04 28 views
15

Hola Estoy tratando de usar la cámara para capturar una imagen en una de mis aplicaciones. Lo que es especial es que necesito un área de vista previa cuadrada (y una imagen al final). Traté de definir el tamaño de la imagen y la vista previa a proporciones de píxel de 1: 1, pero nada parece funcionar. No importa lo que haga, la imagen parece "aplastada" en un cuadrado.Vista previa de la cámara Android: relación de aspecto 1: 1, ¿cómo?

¿Alguien que tenga 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

Respuesta

4

Usted puede tomar un vistazo al código CameraPreview sample desde el SDK de Android. El método getOptimalPreviewSize muestra cómo lidiar con diferentes tamaños de cámara y el método onLayout muestra cómo diseñar la superficie de vista previa en la actividad.

+0

Google buscó en las implementaciones de CameraPreview y lo encontró. Parece manejar una relación de aspecto diferente. Tengo que intentarlo. https://github.com/pocorall/scaloid-apidemos/blob/master/src/main/java/com/example/android/apis/graphics/CameraPreview.java – akhyar

Cuestiones relacionadas