2012-09-26 3 views
5

Ich verwende die folgenden Parameter für meine benutzerdefinierte KameraAndroid Individuelle Kamera-Qualität

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

Und nachdem ein Foto gemacht wird, ist die Qualität des Bildes ziemlich schlecht. Ich habe Autofokus und Blitz im Einsatz.

Dies ist meine Methode das Foto für die Aufnahme ..

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 ist besonders schlimm, wenn der Blitz nicht Feuer tut (ich verwende Blitzautomatik) und das Zimmer, das ich in mir ist gut beleuchtet ..

Antwort

8

Wenn Sie getSupportedPictureSizes() verwenden, gibt es sie nicht notwendigerweise in einer beliebigen Reihenfolge zurück. Es ist wahrscheinlich eine schreckliche Größe in sizes.get(0) zurück. Sie sollten sie vergleichen, um die größte Größe zu finden, wenn Sie die beste Qualität wollen. Etwas wie:

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

Nun, das ist die gleiche Größe haben jetzt, aber ich sehe immer noch ziemlich gezackte Ränder auf die Bilder .. dies etwas hat mit der Montage des Bildes auf dem Bildschirm zu tun, weil das endgültige Bild, einmal gespeichert ist einfach in Ordnung .. – Rabbott

+0

Wahrscheinlich etwas ähnliches mit der Vorschaugröße. Versuchen Sie es mit 'getSupportedPreviewSizes()' zu vermasseln. Versuchen Sie, diejenige zu finden, die dem Aspekt/der Größe Ihres Vorschaufensters am ehesten entspricht. – Geobits