2012-08-13 77 views
3

我在應用程序中有自定義相機,在大多數設備上拍攝的圖像看起來不錯,但在銀河連線上,故事是不同的。 Galaxy聯繫中的圖像模糊。我在摩托羅拉Atrix上也看到了粗糙的線條。但是Droid X,Droid Razr,HTC Evo,HTC令人難以置信都顯示出不錯的效果。任何想法爲什麼它會發生?這是我迄今爲止所擁有的。 P.S .:我在活動中使用自動對焦。自定義相機的圖像在Galaxy Nexus上模糊

public class CameraPreview extends SurfaceView implements 
    SurfaceHolder.Callback { 

private SurfaceHolder mHolder; 
private Camera mCamera; 

public CameraPreview(Context context, Camera camera) { 
    super(context); 
    mCamera = camera; 
    mHolder = getHolder(); 
    mHolder.addCallback(this); 
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
} 

@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    // The Surface has been created, now tell the camera where to draw the 
    // preview. 
    try { 
     mCamera.setPreviewDisplay(holder); 
     Camera.Parameters parameters = mCamera.getParameters(); 
     List<String> focusModes = parameters.getSupportedFocusModes(); 
     if (focusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)) { 
      parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); 
     } 

     parameters.set("orientation", "portrait"); 

     mCamera.setDisplayOrientation(90); 
     mCamera.setParameters(parameters); 
     mCamera.startPreview(); 
    } catch (IOException e) { 
    } 
} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 

} 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 

    if (mHolder.getSurface() == null) { 
     // preview surface does not exist 
     return; 
    } 
    // stop preview before making changes 
    try { 
     mCamera.stopPreview(); 
    } catch (Exception e) { 
     // ignore: tried to stop a non-existent preview 
    } 

    try { 
     mCamera.startPreview(); 

    } catch (Exception e) { 
    } 
} 
+0

愚蠢的問題,但你是否包括清單中的? – Codeman 2012-08-13 23:55:53

+0

是的。我確實將它添加到清單文件中。 – user484691 2012-08-13 23:56:44

+0

可能重複? http://stackoverflow.com/questions/8838441/captured-camera-image-is-looking-blurry你嘗試改變camera.setJpegQuality()? – Codeman 2012-08-13 23:57:21

回答

1

它已經有一段時間了,我解決了這個問題。如果我記得正確,我通過在獲取相機實例時添加下面幾行來解決問題。

Camera.Parameters parameters = camera.getParameters(); 
List<Camera.Size> sizes = parameters.getSupportedPictureSizes(); 
int w = 0, h = 0; 
for (Size size : sizes) { 
    if (size.width > w || size.height > h) { 
     w = size.width; 
     h = size.height; 
    } 

} 
parameters.setPictureSize(w, h); 
+0

非常感謝。它的功能就像一個魅力。 :) – 2016-06-13 07:29:36

+0

你在哪裏添加這些行? – Star 2016-09-21 05:26:05

0

你試過這個嗎?

if (cameraParameters.getSupportedSceneModes().contains(Camera.Parameters.SCENE_MODE_STEADYPHOTO)) { 
    cameraParameters.setSceneMode(Camera.Parameters.SCENE_MODE_STEADYPHOTO); 
} 
相關問題