您的位置:首页 > 文旅 > 旅游 > 建设公司官网介绍_十大计算机培训机构排名_互联网公司_搜狗站长平台验证网站

建设公司官网介绍_十大计算机培训机构排名_互联网公司_搜狗站长平台验证网站

2025/3/12 12:23:14 来源:https://blog.csdn.net/m0_61243965/article/details/144758372  浏览:    关键词:建设公司官网介绍_十大计算机培训机构排名_互联网公司_搜狗站长平台验证网站
建设公司官网介绍_十大计算机培训机构排名_互联网公司_搜狗站长平台验证网站

问题描述:为啥相机在全屏预览的时候,画面会有变形和拉伸?

问题分析:

如果你在相机开发的时候,设置的预览画面是全屏的尺寸:meta60 2760/1260=2.19, 预览用的相机尺寸是1920/1080=1.777 那么这个预览画面1.77投在xcomponent2.19比例上,必然会拉伸变形;

所以要全屏预览还要不变形:需要先获取手机的宽高比,用手机的屏幕的height/width去和相机底层支持的预览尺寸的 width/height 去取最贴近的值

也就是cameraOutputCapability.previewProfiles的分辨率列表中选择2336/1080 = 2.16 这套参数,两个比值只相差 0.03 最合适

解决方案

封装方法//查找【相机全屏预览宽高】最接近的手机默认分辨率findClosestNumber(cameraOutputCapability:camera.CameraOutputCapability,profileType:string):camera.Profile|undefined {let profileArr=cameraOutputCapability.previewProfiles;    //预览的分辨率if(profileType=='PhotoProfile'){profileArr = cameraOutputCapability.photoProfiles;   //相机支持的分辨率列表}let screenWidth=display.getDefaultDisplaySync().widthlet screenHeight=display.getDefaultDisplaySync().heightlet target:number=0;if(profileArr.length < 1) {return undefined;}if(screenWidth&&screenHeight){target=screenHeight/screenWidth       //全屏幕宽高比例}let closest = profileArr[0]; // 初始化最接近的数为数组的第一个元素let smallestDifference = Math.abs(profileArr[0].size.width/profileArr[0].size.height - target); // 初始化最小差值为第一个元素与目标值的差值for (let i = 1; i < profileArr.length; i++) {if(profileArr[i].size.width>=1080){  //避免小分辨率的比例算出来的数据也相临近,只计算分辨率大于1080的let currentDifference = Math.abs(profileArr[i].size.width/profileArr[i].size.height - target);if (currentDifference <= smallestDifference) {smallestDifference = currentDifference;closest = profileArr[i];}}}return closest;  //返回全屏时候最佳的分辨率

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com