2012-01-12 84 views
4

我的問題捕獲的圖像在我的應用程序中看起來很模糊,因爲用設備相機組件拍攝的圖像看起來不錯 - 一旦用戶單擊捕獲按鈕時會自動縮放效果。可以有人幫助我實現這種情況應該如何以及在哪裏應用。捕獲的相機圖像看起來模糊

這裏是代碼:

public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) { 
    // Now that the size is known, set up the camera parameters and begin 
    // the preview. 
    Camera.Parameters parameters = camera.getParameters(); 
    Integer version = Integer.parseInt(Build.VERSION.SDK); 
    if(version > Build.VERSION_CODES.ECLAIR_MR1) 
    { 
     Log.d(TAG, "------> version greater than eclari 2.1"); 
     List<Size> sizes = parameters.getSupportedPreviewSizes(); 
     Size optimalSize = getOptimalPreviewSize(sizes, width, height); 
     parameters.setPreviewSize(optimalSize.width, optimalSize.height); 
    } 
    else 
    { 
     Log.d(TAG, "------> version less than eclari 2.1"); 
     parameters.setPreviewSize(ApplicationInitiator.screenW,ApplicationInitiator.screenH); 
    } 

    List<String> focusModes = parameters.getSupportedFocusModes(); 
    if (focusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)) 
    { 
     parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); 
    } 

    parameters.setJpegQuality(100); 
    camera.setParameters(parameters); 
    camera.startPreview(); 
} 

回答

11

好了,你的文字你談論捕獲的圖像,但我沒有看到你的代碼,任何關於拍照,無論如何,如果你想獲得一張焦點照片,你需要做的就是註冊一個AutoFocusCallback以獲得焦點時拍照:

Camera.AutoFocusCallback mAutoFocusCallback = new Camera.AutoFocusCallback() { 
    @Override 
    public void onAutoFocus(boolean success, Camera camera) { 
     camera.takePicture(null, null, mPictureCallbackRaw); 
    } 
}; 

Camera.PictureCallback mPictureCallbackRaw = new Camera.PictureCallback() { 
    public void onPictureTaken(byte[] data, Camera c) { 
     // (...)    
    } 
}; 

public void takeFocusedPicture() { 
    mCamera.autoFocus(mAutoFocusCallback); 
} 

+0

它確實有效!非常感謝。但是,如果你只是試圖調用camera.takePicture,那麼你會看到模糊的表面。 – Stan 2013-04-02 19:42:38

+0

拍照前必須正確調用,否則不起作用。 – 2013-07-11 19:35:43