gpt4 book ai didi

ios - MTKView - 调整纹理大小以填充 View

转载 作者:行者123 更新时间:2023-11-28 07:30:39 25 4
gpt4 key购买 nike

我是 Metal 的新手,但正在努力遵循 Apple 的 AVCamFilter示例项目。该项目演示了如何使用 MTKView 作为 AVCaptureSession 的预览。

我一直未能弄清楚如何让我的 MTKView 呈现“全屏”(特别是在 iPhone X、XS 和第 3 代 iPad Pro 上)。虽然我的约束在 Storyboard 中设置正确,但我的相机预览缩放到不同的宽高比,而不是全屏。

作为测试,我设置了;

self.clearColor = MTLClearColor(红: 1.0, 绿: 0.0, 蓝: 0.0, alpha: 1.0)

在我的 MTKView 的初始化中,确认 MTKView 的大小合适(我可以在有问题的区域看到红色背景,但我的相机预览不会拉伸(stretch)以填满屏幕)。

我相信我的问题存在于这个计算中;

// Calculate scale.
if textureWidth > 0 && textureHeight > 0 {
switch textureRotation {
case .rotate0Degrees, .rotate180Degrees:
scaleX = Float(internalBounds.width / CGFloat(textureWidth))
scaleY = Float(internalBounds.height / CGFloat(textureHeight))

case .rotate90Degrees, .rotate270Degrees:
scaleX = Float(internalBounds.width / CGFloat(textureHeight))
scaleY = Float(internalBounds.height / CGFloat(textureWidth))
}
}

// Resize aspect ratio.
resizeAspect = min(scaleX, scaleY)
if scaleX < scaleY {
scaleY = scaleX / scaleY
scaleX = 1.0
} else {
scaleX = scaleY / scaleX
scaleY = 1.0
}

在我的测试环境中,纹理大小为 2400x1800,内部边界为 834x1194。虽然我认识到宽高比的差异,但我正在尝试找出正确的数学方法让纹理填充整个显示器(即使这意味着它的缩放比例略小并且我失去了侧面的一些纹理)。

谁能给个建议?谢谢!

最佳答案

// Resize aspect ratio.
resizeAspect = min(scaleX, scaleY)

if scaleX < scaleY {
scaleY = scaleX / scaleY
scaleX = 1.0
} else {
scaleX = scaleY / scaleX
scaleY = 1.0
}

替换为

// Resize aspect ratio.
// For AspectFill Screen scaleX > scaleY
// For AspectFit Screen scaleX < scaleY

resizeAspect = min(scaleX, scaleY)
if scaleX > scaleY {
scaleY = scaleX / scaleY
scaleX = 1.0
} else {
scaleX = scaleY / scaleX
scaleY = 1.0
}

关于ios - MTKView - 调整纹理大小以填充 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54817589/

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