HarmonyOS Camera相机开发,预览流能否设置分辨率?

在开发相机的预览功能时,发现XComponet的宽高比如果和相机的分辨率不一致,显示的画面会变形。在Profile中获取到分辨率为640 * 480 (这里不能修改),展示的XComponet的宽高比为1:1

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

要全屏还要不变形,需要获取手机的宽高比,用手机的屏幕的height /width去和支持的预览尺寸的 width/ height 去取最贴近的值,并使得surface和XComponent的宽高相同

使用下列代码获取设备支持的宽和高,然后根据手机屏幕的宽高设置最合适的预览流分辨率,并且使得surface和XComponent的宽高相同。

示例参考如下:

//预览流与录像输出流的分辨率的宽高比要保持一致
let previewProfilesArray: Array<camera.Profile> = cameraOutputCap.previewProfiles;

let position: number = 0;
if (previewProfilesArray != null) {
  previewProfilesArray.forEach((value: camera.Profile, index: number) => {
    // 查看支持的预览尺寸
    console.info(TAG, `支持的预览尺寸: [${value.size.width},${value.size.height},${value.size.width / value.size.height }]`);
    if (value.size.width === 2592 && value.size.height === 1200) {
      position = index;
    }
  })
} else {
  console.error(TAG, "createOutput photoProfilesArray == null || undefined");
}

let photoProfilesArray: Array<camera.Profile> = cameraOutputCap.photoProfiles;
if (!photoProfilesArray) {
  console.error(TAG, "createOutput photoProfilesArray == null || undefined");
}

this.xComponentWidth = previewProfilesArray[position].size.width;
this.xComponentHeight = previewProfilesArray[position].size.height;

this.mXComponentController.setXComponentSurfaceSize({
  surfaceWidth: this.xComponentWidth,
  surfaceHeight: this.xComponentHeight
});
// 创建预览输出流,其中参数 surfaceId 参考上文 XComponent 组件,预览流为XComponent组件提供的surface
try {
  previewOutput = cameraManager.createPreviewOutput(previewProfilesArray[position], surfaceId);
} catch (error) {
  let err = error as BusinessError;
  console.error(TAG, `Failed to create the PreviewOutput instance. error code: ${err.code}`);
}
if (previewOutput === undefined) {
  return;
}

// 监听预览输出错误信息
previewOutput.on('error', (error: BusinessError) => {
  console.error(TAG, `Preview output error code: ${error.code}`);
});

// 创建ImageReceiver对象,并设置照片参数:分辨率大小是根据前面 photoProfilesArray 获取的当前设备所支持的拍照分辨率大小去设置
let imageReceiver: image.ImageReceiver = image.createImageReceiver(2592, 1200, 4, 8);
分享
微博
QQ
微信
回复
1天前
相关问题
如何设置图片显示的分辨率
474浏览 • 1回复 待解决
HarmonyOS 手机分辨率怎么获取?
212浏览 • 1回复 待解决
如何在图片显示的分辨率
1780浏览 • 1回复 待解决
HarmonyOS 如何获取屏幕分辨率
554浏览 • 1回复 待解决
应用图标分辨率规范问题
1031浏览 • 1回复 待解决
获取鸿蒙的分辨率高度不对
6055浏览 • 1回复 待解决
OpenGL无法正常渲染某些分辨率YUV数据
430浏览 • 0回复 待解决