Camera系列纠正

前面我发了两篇blog,一篇是变焦总结,有错误。一篇是surfaceview显示camera摄像画面,可以运行,但是setParameters会导致bug,当然我注释掉了。

在这里做个纠正:

1.手机支不支持摄像头变焦

2.系统自带摄像软件可以变焦,但是自己编写的程序不支持变焦,我自己的htc g14 sensation就是这样滴。

3.系统自带摄像软件可以变焦,但是自己编写的程序支持变焦,


自己编写的程序是否可以变焦,调用Log.d(TAG, "max zoom:"+camera.getParameters().getMaxZoom());如果是0,则不让你变焦的

与Log.d(TAG, "smoothZoom:"+camera.getParameters().isSmoothZoomSupported());
    Log.d(TAG, "supportzoom:"+camera.getParameters().isZoomSupported());

这个输出无关。

我的g14,soomth zoom 结果false

zoomSupport 结果为true,但是camera.getParameters().getMaxZoom()结果为0 ,不让你变焦。

至于调用

stopSmoothZoom()

startSmoothZoom(int value)

则必须This method is supported if isSmoothZoomSupported() is true.

sdk文档描述。

注意api 是8,api为7当然不编译了。

至于变焦设置,sdk文档描述:

public void setZoom (int value)
Since: API Level 8

Sets current zoom value. If the camera is zoomed (value > 0), the actual picture size may be smaller than picture size setting. Applications can check the actual picture size after picture is returned from Camera.PictureCallback. The preview size remains the same in zoom. Applications should check isZoomSupported() before using this method.

但是,g14 sensation的情况是 isZoomSupported()  是true,但是maxzoom 为0,这肯定就不能变了。


第二个;参数设置问题:

			Camera.Parameters parameters = camera.getParameters();
			/* 设置预览照片的大小,此处设置为全屏 */
//			WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); // 获取当前屏幕管理器对象
//			Display display = wm.getDefaultDisplay();      				     // 获取屏幕信息的描述类
//			parameters.setPreviewSize(display.getWidth(), display.getHeight());          // 设置
			parameters.setPreviewSize(200, 200); 
			/* 每秒从摄像头捕获5帧画面, */
			parameters.setPreviewFrameRate(5);
			/* 设置照片的输出格式:jpg */
			parameters.setPictureFormat(PixelFormat.JPEG);
			/* 照片质量 */
			parameters.set("jpeg-quality", 85);
			/* 设置照片的大小:此处照片大小等于屏幕大小 */
//			parameters.setPictureSize(display.getWidth(), display.getHeight());
			parameters.setPictureSize(200, 200);
			/* 将参数对象赋予到 camera 对象上 */
//			camera.setParameters(parameters);

这段代码有问题,当然报bug的地方我都注释了
//			camera.setParameters(parameters);
如果不注释:

ERROR/QualcommCameraHardware(1242): Invalid preview size requested: 480x800
ERROR/QualcommCameraHardware(1242): virtual android::status_t android::QualcommCameraHardware::setParameters(const android::CameraParameters&): 2922, rc = -22
ERROR/QualcommCameraHardware(1242): Invalid picture size requested: 480x800
ERROR/QualcommCameraHardware(1242): virtual android::status_t android::QualcommCameraHardware::setParameters(const android::CameraParameters&): 2923, rc = -22
ERROR/AndroidRuntime(5925): FATAL EXCEPTION: main
ERROR/AndroidRuntime(5925): java.lang.RuntimeException: setParameters failed
ERROR/AndroidRuntime(5925): at android.hardware.Camera.native_setParameters(Native Method)
ERROR/AndroidRuntime(5925): at android.hardware.Camera.setParameters(Camera.java:914)
ERROR/AndroidRuntime(5925): at cn.edu.wtu.CameravedioActivity$SurfaceViewCallback.surfaceCreated(CameravedioActivity.java:190)
log给出了原因:参数设置不合法,一看preview size非法,picture size非法

g12 测试 log

既然preview size非法,picture size非法,总有合法的,和支持的吧,于是乎,我查看sdk文档:

Camera.Parameters

List< Camera.Size> getSupportedPreviewSizes()
List< Camera.Size> getSupportedPictureSizes()

然在看看其他的支持的参数:

List< Camera.Size> getSupportedVideoSizes()
List<int[]> getSupportedPreviewFpsRange()
Gets the supported preview fps (frame-per-second) ranges.
List< Integer> getSupportedPreviewFrameRates()
List< Integer> getSupportedPictureFormats()
等等。回归正题:

支持的size可以遍历出来,然后取一个适合自己屏幕的size就可以了,list存取的是Camera.size类:


好了,纠正过来了,弄了一整天啊,下一篇将这些纠正过来应用到自己的小demo上。








  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值