2012-09-26 24 views
5

Używam następujące parametry dla mojego niestandardowego kameryAndroid Niestandardowe Kamera Jakość

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

A po zrobieniu zdjęcia, jakość obrazu jest bardzo złe. Mam w użyciu autofocus i flash.

To jest moja metoda robienia zdjęcia ..

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

Jest to szczególnie źle, kiedy lampa nie zapala (używam Automatyczna lampa błyskowa) i jestem w pokoju jest dobrze oświetlone ..

Odpowiedz

8

Podczas korzystania z getSupportedPictureSizes(), niekoniecznie zwraca je w dowolnej kolejności. Prawdopodobnie powraca w okropnym rozmiarze w numerze sizes.get(0). Powinieneś je porównać, aby znaleźć największy rozmiar, jeśli chcesz uzyskać najlepszą jakość. Coś jak:

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

dobrze, rozmiar jest teraz spójne, ale ja wciąż widząc dość postrzępione krawędzie na obrazach .. to ma coś wspólnego z zamontowaniem obrazu na ekranie, ponieważ ostateczny obraz, raz zapisane jest w porządku .. – Rabbott

+0

Prawdopodobnie coś podobnego z rozmiarem podglądu. Spróbuj użyć 'getSupportedPreviewSizes()' do tego. Spróbuj znaleźć ten, który najbardziej pasuje do aspektu/rozmiaru okna podglądu. – Geobits