如何避免预览流产生畸变

如何避免预览流产生畸变

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);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
分享
微博
QQ
微信
回复
2024-06-13 00:06:03
相关问题
如何使用预览接口进行文件预览
1219浏览 • 1回复 待解决
Greenplum在哪些场景中会产生临时表?
4161浏览 • 1回复 待解决
物联网产生的数据有什么特征?
5070浏览 • 1回复 待解决
如何创建相机预览输出?
965浏览 • 0回复 待解决
HarmonyOS 如何实现图片预览
883浏览 • 1回复 待解决
HarmonyOS filePreview预览txt提示预览失败
1787浏览 • 1回复 待解决
使用预览器实现多端预览
1913浏览 • 1回复 待解决
卡片能否通过预览器进行预览
1365浏览 • 1回复 待解决
如何通过web组件预览PDF
1473浏览 • 1回复 待解决
如何实现pdf文件的预览
1330浏览 • 1回复 待解决
HarmonyOS 相机预览的时候预览图被拉伸
1040浏览 • 1回复 待解决
如何实现双路预览+录制功能
2087浏览 • 1回复 待解决
如何使用预览器查看服务效果
2991浏览 • 1回复 待解决