首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Camera1和Camera2之间的缩放级别差异

Camera1和Camera2之间的缩放级别差异
EN

Stack Overflow用户
提问于 2018-07-31 02:44:56
回答 1查看 252关注 0票数 1

在我们的应用程序中,我们同时支持Camera和Camera2两种拍照接口。我注意到的是,我们在两个API上得到的放大深度不同。

使用Camera1应用编程接口,设置缩放级别非常简单:

代码语言:javascript
运行
复制
Camera.Paramenters params = mCamera.getParameters();
params.setZoom(zoomLevel);
mCamera.setParameters(params);

使用Camera2接口,缩放级别设置如下(取自标准Camera2示例应用程序的代码):

代码语言:javascript
运行
复制
final int zoomScale = 200;
captureBuilder.set(CaptureRequest.SCALER_CROP_REGION, new
     Rect(zoomScale * mZoomLevel, zoomScale * mZoomLevel, mStartBounds.right
     - (zoomScale * mZoomLevel), mStartBounds.bottom - (zoomScale * mZoomLevel)));

我使用的安卓设备的最大缩放值为4。在缩放级别为4的情况下,Camera1似乎比Camera2放大了更多(至少放大了10%)。

我想知道我的计算中是否遗漏了什么,或者只是Camera2应用程序接口的设计方式。致以问候。

EN

回答 1

Stack Overflow用户

发布于 2018-08-01 02:30:48

我不确定您是如何为zoomScale选择值200的。camera2的裁剪区域位于传感器的active array坐标中,因此,如果您希望进行2倍缩放,则需要将矩形设置为活动阵列的宽度和高度的一半。

粗略的示例代码:

代码语言:javascript
运行
复制
CameraCharacteristics c = cameraManager.getCameraCharacteristics(cameraId);
Rect activeArray = c.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
int cropWidth = activeArray.width() / mZoomLevel;
int cropHeight = activeArray.height() / mZoomLevel; 
int cropLeft = (activeArray.width() - cropWidth) / 2;
int cropTop = (activeArray.height() - cropHeight) / 2;
Rect cropRegion = new Rect(cropLeft, cropTop, cropLeft + cropWidth, cropTop + cropHeight)
captureBuilder.set(CaptureRequest.SCALER_CROP_REGION, cropRegion);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51600378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档