2012-09-26 28 views
5

estoy usando los siguientes parámetros para mi cámara personalizadaAndroid calidad de la cámara personalizada

mCamera = getCameraInstance(); 

params = mCamera.getParameters(); 
params.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO); 
params.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); 
params.setSceneMode(Camera.Parameters.SCENE_MODE_AUTO); 
params.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO); 
params.setExposureCompensation(0); 
params.setPictureFormat(ImageFormat.JPEG); 
params.setJpegQuality(100); 
params.setRotation(90); 

List<Size> sizes = params.getSupportedPictureSizes(); 
Camera.Size size = sizes.get(0); 
params.setPictureSize(size.width, size.height); 

mCamera.setParameters(params); 

Y después de tomar una foto, la calidad de la imagen es bastante malo. Tengo autoenfoque y flash en uso.

Este es mi método para tomar la foto ..

mCamera.autoFocus(new Camera.AutoFocusCallback() { 
    ShutterCallback shutterCallback = new ShutterCallback() { 

     @Override 
     public void onShutter() { 
      AudioManager mgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
      mgr.playSoundEffect(AudioManager.FLAG_PLAY_SOUND); 
     } 
    }; 

    PictureCallback pictureCallback = new PictureCallback() { 

     @Override 
     public void onPictureTaken(byte[] data, 
       Camera camera) { 
      ... 
     } 
    }; 

    public void onAutoFocus(boolean success, Camera camera) { 
     mCamera.takePicture(shutterCallback, 
       null, null, pictureCallback); 
    } 
}); 

Es especialmente mala cuando el flash no se dispara (estoy usando el flash automático) y la habitación que estoy en está bien iluminado ..

Respuesta

8

Cuando usa getSupportedPictureSizes(), no necesariamente los devuelve en ningún orden. Probablemente esté devolviendo un tamaño horrible en sizes.get(0). Debes compararlos para encontrar el tamaño más grande si quieres la mejor calidad. Algo así como:

List<Size> sizes = params.getSupportedPictureSizes(); 
Camera.Size size = sizes.get(0); 
for(int i=0;i<sizes.size();i++) 
{ 
    if(sizes.get(i).width > size.width) 
     size = sizes.get(i); 
} 
params.setPictureSize(size.width, size.height); 
+0

Pues bien, el tamaño es consistente ahora, pero todavía estoy viendo bordes muy dentados en las imágenes .. esto tiene algo que ver con el montaje de la imagen a la pantalla debido a que la imagen final, una vez guardado está bien .. – Rabbott

+0

Probablemente algo similar con el tamaño de vista previa. Intenta jugar con 'getSupportedPreviewSizes()' para eso. Intente encontrar el que más se acerque al aspecto/tamaño de su ventana de vista previa. – Geobits

Cuestiones relacionadas