2012-09-26 13 views
5

Sto usando i seguenti parametri per la mia macchina fotografica personalizzatoAndroid personalizzato qualità della fotocamera

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); 

E dopo una foto è presa, la qualità dell'immagine è piuttosto male. Ho autofocus e flash in uso.

Questo è il mio metodo per scattare 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); 
    } 
}); 

È particolarmente male quando il flash non si attiva (sto usando il flash automatico) e la camera sono in è ben illuminata ..

risposta

8

Quando si utilizza getSupportedPictureSizes(), non è necessario restituirli in qualsiasi ordine. Probabilmente restituirà una dimensione orribile nel sizes.get(0). Dovresti confrontarli per trovare la taglia più grande se vuoi la migliore qualità. Qualcosa di simile:

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

Ebbene, la dimensione è coerente ora, ma sto ancora vedendo bordi frastagliati abbastanza sulle immagini .. questo ha qualcosa a che fare con il montaggio l'immagine sullo schermo, perché l'immagine finale, una volta salvato va bene .. – Rabbott

+0

Probabilmente qualcosa di simile con la dimensione dell'anteprima. Prova a fare a pasticcio con 'getSupportedPreviewSizes()' per quello. Cerca di trovare quello che più si avvicina all'aspetto/dimensione della tua finestra di anteprima. – Geobits

Problemi correlati