目前我遇到的情况是,在4.0.3版本的平板上外接一个摄像头,调用摄像头在预览界面做一些画图操作。代码在模拟器上和其他一些设备上是可以运行的,但是在我的设备上预览界面是花的。在网上也没找到类似的情况,通过我自己的排查,在log里面找到这样的一段
HWC version v1.2 is support yuv, Camera display format isn't fix rgb请大牛指导。
/**
 * 初始化相机参数,比如相机的参数: 像素, 大小,格式
 */
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Camera.Parameters param = mCamera.getParameters(); /**
 * 设置拍照图片格式
 */
param.setPictureFormat(PixelFormat.JPEG);
param.setPreviewFormat(ImageFormat.YV12);
/**
 * 设置预览尺寸【这里需要注意:预览尺寸有些数字正确,有些会报错,不清楚为啥】
 */
List<Camera.Size> previewSizes = param.getSupportedPreviewSizes();// 不同手机支持的预览区的大小是不一样的,而且也不是任意的,该方法的作用是获取手机支持的预览区大小,以便按自己的需求进行自定义
Camera.Size previewSize = previewSizes.get(0);// 为了演示,选择第一个
param.setPreviewSize(previewSize.width, previewSize.height);
Log.d("width", ""+previewSize.width);
Log.d("height", ""+ previewSize.height);
/**
 * 设置图片大小
 */
// List<Camera.Size> picSizes = param.getSupportedPictureSizes();// 和预览区的设置一样,相机最后捕获的照片的大小也是因手机厂商的不同而不同,而且不能随便定义
// Camera.Size picSize = picSizes.get(0);// 为了演示,随便选择一个
// param.setPictureSize(picSize.width, picSize.height);
mCamera.setParameters(param);
/**
 * 开始预览
 */
mCamera.startPreview();
} /**
 * 打开相机,设置预览
 */
public void surfaceCreated(SurfaceHolder holder) {

try {
mCamera = Camera.open(0); // 打开摄像头
holder.setFormat(PixelFormat.RGB_565);
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
mCamera.release();
mCamera = null;
}
} /**
 * 预览界面被关闭时,或者停止相机拍摄;释放相机资源
 */
public void surfaceDestroyed(SurfaceHolder holder) {
mCamera.stopPreview();
if (mCamera != null)
mCamera.release();
mCamera = null;
} public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_CAMERA) { // 按下相机实体按键,启动本程序照相功能
mCamera.autoFocus(new AutoFoucus()); // 自动对焦
return true;
} else {
return false;
}
}

解决方案 »

  1.   

    你有没有试过安装其他的 camera 软件比如360 试试看效果。再者 你抓的log 
    HWC version v1.2 is support yuv, Camera display format isn't fix rgb
    holder.setFormat(PixelFormat.RGB_565);
    是否有矛盾呢?  其实 这些东西 都不用设置你就是简单的测试 预览 没必要参数设置的过多
      

  2.   

    预览模式设置成param.setPreviewFormat(ImageFormat.NV21),或者设置成其他格式试试,还有surfaceholder好像是不用设置图片格式的吧,反正我做的没有设置,估计问题就出在预览模式上,你试试其他的预览模式吧,希望你早日解决