目前我遇到的情况是,在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;
}
}
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;
}
}
解决方案 »
- Android如何设置Text的属性为:如 abc³ 等有上下标的文字
- Android中的多国语言是怎么实现的?
- 求一款android软件,江湖救急~~~~~急~~~~
- 为什么我导入sdk的demo,com.example.android.apis.R找不到呢?
- 百度地图android api 2.0 无法使用MapView的addview方法
- android中读取并显示excel
- android NDK编译问题/arm-linux-androideabi/bin/ld.exe: error: cannot find -lcrypto
- 通知栏的上拉或者下拉问题
- 安卓listview缓存机制对下拉后单选按钮的干扰
- 开发一个android富文本编辑器
- 一个简单的时钟计数器
- 关于ListView的一个问题
HWC version v1.2 is support yuv, Camera display format isn't fix rgb
holder.setFormat(PixelFormat.RGB_565);
是否有矛盾呢? 其实 这些东西 都不用设置你就是简单的测试 预览 没必要参数设置的过多