2012-01-12 2 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

+0

Это нужно вызвать прямо перед съемкой, иначе это не сработает. –

Смежные вопросы