使用Camera API

Symbian 7.0以上的版本使用CCamera来访问摄像头。
CCamera提供了一个可用于应用程序交互和获取照相机图像的接口。 CCamera封装了一系列易于使用的API 同时,它提供了一个MCameraObserver注册到CCamera,通知应用程序各种关键事件。必须实现 MCameraObserver的所有纯虚方法供系统在事件产生的时候回调。

要捕捉一幅图像,首先需要创建一个
CCamera的实例。调用CCamera::NewL(MCameraObserver&,TInt):
iCamera = CCamera::NewL( aObserver,0 );
然后我们需要保留照相机设备:
User::LeaveIfError(iCamera->Reserve());
这个异步函数成功返回的时候系统会调用
MCameraObserver::ReserveComplete()方法。下一步我们要通过PowerOn()函数开启它。这也是一个异步方法,当操作完成时,他调用 MCameraObserver::ReserveComplete()。
iCamera->PowerOn();
在使用CaptureImage()之前,我们需要指定图像的格式和大小。TCameraInfo::iImageFrameFormatsSupported提供对格式的支持,CCamera::EnumerateCaptureSizes()提供对大小的支持。使用CCamera::
PrepareImageCaptureL()来指定图像格式和大小。拍摄照片之前,至少调用一次该函数。
iCamera->PrepareImageCaptureL(CCamera::EFormatFbsBitmapColor4K,1);
然后我们可以照相了。
iCamera->CaptureImage();
当捕捉成功后,将调用
MCameraObserver::ImageReady()。应用程序使用完照相机后,应释放照相机。
iCamera->Release();
CCamera还提供了闪光模式、光学和数字变焦、亮度、对比度、曝光等设置功能,依赖于设备的硬件能力。
使用Android的Camera API处理摄像头分辨率时,可能会遇到设备不支持某个特定分辨率的问题。这通常是由于硬件限制、软件兼容性问题或是相机驱动不支持所请求的分辨率。 处理这种场景的策略有以下几点: 1. **查询设备能力**:使用`Camera.getParameters().getSupportedPreviewSizes()`获取设备当前支持的所有预览大小,然后从列表中选择最接近你期望分辨率的一个作为替代。 ```java List<Size> sizes = camera.getParameters().getSupportedPreviewSizes(); for (Size size : sizes) { if (size.getWidth() * size.getHeight() > desiredWidth * desiredHeight) { // 或者其他适应度条件 desiredWidth = size.getWidth(); desiredHeight = size.getHeight(); break; } } ``` 2. **错误提示或用户反馈**:如果找不到合适的分辨率,可以在应用内向用户显示通知,说明当前设备不支持他们请求的分辨率,并建议他们切换到设备支持的最高或最低分辨率。 3. **提供默认值**:如果设备确实不支持任何已知的合理分辨率,那么可以设置一个默认值,如设备的原生分辨率,或者提供一个固定的最小和最大尺寸供用户选择。 4. **API版本兼容性**:检查你的应用兼容的API版本,有些高级功能在低版本中可能不可用。例如,在Camera2 API中,一些设备可能只支持某些特定的预览尺寸。 总之,处理这类情况的关键在于理解和适配设备的能力,而不是强制执行预期的行为。同时,提供良好的用户体验非常重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值