前面我发了两篇blog,一篇是变焦总结,有错误。一篇是surfaceview显示camera摄像画面,可以运行,但是setParameters会导致bug,当然我注释掉了。
在这里做个纠正:
1.手机支不支持摄像头变焦
2.系统自带摄像软件可以变焦,但是自己编写的程序不支持变焦,我自己的htc g14 sensation就是这样滴。
自己编写的程序是否可以变焦,调用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文档描述:
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.
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);
// 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上。