从定制的相机图像模糊上的Galaxy Nexus [英] Images from Custom Camera are blurry on Galaxy Nexus

查看:112
本文介绍了从定制的相机图像模糊上的Galaxy Nexus的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在应用定制的相机,并采取在大多数设备的图像看起来不错,但在Galaxy Nexus的故事是不同的。图像中的Galaxy Nexus模糊。我看到摩托罗拉Atrix木纹线条。但是Droid X的,DROID RAZR,HTC的Evo,HTC不可思议的是显示效果不错。任何想法,为什么它会happpen?这是我到目前为止所。
P.S:我使用自动对焦的活动。

 公共类相机preVIEW延伸SurfaceView工具
    SurfaceHolder.Callback {私人SurfaceHolder mHolder;
私人相机mCamera;公共摄像头preVIEW(上下文的背景下,相机摄像头){
    超级(上下文);
    mCamera =摄像头;
    mHolder = getHolder();
    mHolder.addCallback(本);
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}@覆盖
公共无效surfaceCreated(SurfaceHolder持有人){
    //表面有被创建,现在告诉相机在哪里画
    // preVIEW。
    尝试{
        mCamera.set previewDisplay(支架);
        Camera.Parameters参数= mCamera.getParameters();
        清单<串GT; focusModes = parameters.getSupportedFocusModes();
        如果(focusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)){
            parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
        }        parameters.set(方向,肖像);        mCamera.setDisplayOrientation(90);
        mCamera.setParameters(参数);
        mCamera.start preVIEW();
    }赶上(IOException异常五){
    }
}@覆盖
公共无效surfaceDestroyed(SurfaceHolder持有人){}@覆盖
公共无效surfaceChanged(SurfaceHolder架,INT格式,诠释W,INT高){    如果(mHolder.getSurface()== NULL){
        // preVIEW表面不存在
        返回;
    }
    在进行更改之前//停止preVIEW
    尝试{
        mCamera.stop preVIEW();
    }赶上(例外五){
        //忽略:试图停止不存在的preVIEW
    }    尝试{
        mCamera.start preVIEW();    }赶上(例外五){
    }
}


解决方案

它已经有一段时间我解决了这个问题。如果我没有记错的话,我通过添加以下线路同时获得相机的实例解决了。

  Camera.Parameters参数= camera.getParameters();
清单< Camera.Size>尺寸= parameters.getSupportedPictureSizes();
INT W = 0中,h = 0;
对于(尺寸大小:大小){
   如果(size.width> W-- || size.height> H){
      W = size.width;
      H = size.height;
   } }
 parameters.setPictureSize(W,H);

I have a custom camera in the app and the images that are taken on most of the devices look good but on galaxy nexus the story is different. Images are blurry in Galaxy nexus. I see grainy lines on Motorola Atrix as well. But Droid X, Droid Razr, HTC Evo, HTC incredible are showing good results. Any idea why it would happpen? This is what I have so far. P.S.: I am using Auto focus in the activity.

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

解决方案

Its been a while I solved this problem. If I remember it correctly, I solved by adding the below lines while getting the camera instance.

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

这篇关于从定制的相机图像模糊上的Galaxy Nexus的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆