gpt4 book ai didi

ios - 补偿 AVLayerVideoGravityResizeAspectFill 高度差

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:03:31 40 4
gpt4 key购买 nike

我有一个这样的嵌套视频: Live camera feed

当用户拍照时,图像沿y轴偏移 Captured Still image

我确实想要捕获整个图像并让用户上下滚动。他们目前可以这样做,但我希望图像的起始滚动居中以匹配相机提要预览。因此,如果他们拍照,图像就会与视频源显示的帧相匹配。

问题是,因为相机的纵横比设置为 AVLayerVideoGravityResizeAspectFill,它会进行一些“裁剪”以使图像适合实时预览。由于高度远大于宽度,因此图像中捕获的顶部和底部部分没有显示在实时源中(自然)。

但是,我不知道顶部被裁剪了多少,以便我可以偏移预览图像以匹配它。

所以我的问题是:您知道如何计算宽高比设置为 AVLayerVideoGravityResizeAspectFill 的相机顶部的裁剪量吗? (欢迎使用 Objective-C 和 Swift 回答!)

最佳答案

我想出的解决方案是这样的:

  func getVerticalOffsetAdjustment()->CGFloat
{
var cropRect:CGRect = _videoPreviewLayer.metadataOutputRectOfInterestForRect(_videoPreviewLayer.bounds) //returns the cropped aspect ratio box so you can use its offset position
//Because the camera is rotated by 90 degrees, you need to use .x for the actual y value when in portrait mode
return cropRect.origin.x/cropRect.width * frame.height
}

我承认这很令人困惑,但是因为在纵向模式下相机会旋转 90 度,所以您需要使用 width 和 x 值。 cropRect 将返回类似 (0.125,0,0,75,1.0) 的值(您的确切值会有所不同)。

这告诉我,我移动的 y 值(实时视频向我显示的值)向下移动了其总高度的 12.5%,而视频源的高度仅为总高度的 75%。

所以我将 12.5% 除以 75% 以获得标准化的(对我的 UIWindow)值,然后将该值应用到 ScrollView 偏移量。

哇!!!

关于ios - 补偿 AVLayerVideoGravityResizeAspectFill 高度差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26536740/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com