如何避免预览流产生畸变

如何避免预览流产生畸变

HarmonyOS
2024-06-11 23:52:49
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
elucky

全屏且不变形,需要获取手机的宽高比,用手机的屏幕的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
微信
回复
2024-06-13 00:06:03
相关问题
Greenplum在哪些场景中会产生临时表?
2344浏览 • 1回复 待解决
物联网产生的数据有什么特征?
2847浏览 • 1回复 待解决
如何通过web组件预览PDF
210浏览 • 1回复 待解决
使用预览器实现多端预览
470浏览 • 1回复 待解决
如何实现双路预览+录制功能
508浏览 • 1回复 待解决
如何使用预览器查看服务效果
1043浏览 • 1回复 待解决
卡片能否通过预览器进行预览
271浏览 • 1回复 待解决
如何实现拍照预览onPreviewFrame回调
221浏览 • 1回复 待解决
PDF预览如何隐藏PDF操作按钮
554浏览 • 1回复 待解决
camera_lite预览功能如何实现?
1164浏览 • 0回复 待解决
如何连续获取相机预览流数据
175浏览 • 1回复 待解决
DevEco Studio预览器支持实时预览吗?
4776浏览 • 1回复 待解决
如何解决预览流黑屏的问题
396浏览 • 1回复 待解决
如何实现图片的大图预览效果
554浏览 • 1回复 待解决
如何获取前置摄像头的预览图像
1056浏览 • 1回复 待解决
camera 获取预览数据
529浏览 • 1回复 待解决