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

发布于 1周前 作者 h691938207 来自 鸿蒙OS

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

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

2 回复

要全屏还要不变形,需要获取手机的宽高比,用手机的屏幕的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);

HarmonyOS 鸿蒙Next Camera相机开发,可以设置预览流分辨率

在HarmonyOS相机开发中,预览流的分辨率是可以设置的,但需要注意以下几点:

  1. 预览流与输出流分辨率一致性:预览流与录像输出流的分辨率宽高比必须保持一致。例如,如果设置XComponent组件中的Surface显示区域宽高比为16:9,则预览流中的分辨率宽高比也应为16:9,如640:360、960:540或1920:1080等。
  2. 获取设备支持的预览能力:通过CameraOutputCapability类中的previewProfiles属性,可以获取当前设备支持的预览能力,从而选择合适的分辨率。
  3. 创建预览输出流:使用createPreviewOutput方法创建预览输出流,该方法需要传入预览能力和Surface ID作为参数。

如果在开发过程中遇到预览流分辨率设置问题,可以检查预览流与输出流的分辨率宽高比是否一致,以及是否正确获取并使用了设备支持的预览能力。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部