gpt4 book ai didi

ios - 如何使用 MetalPetal 遮盖图像并以透明方式输出

转载 作者:行者123 更新时间:2023-12-04 15:16:35 27 4
gpt4 key购买 nike

我有一个不透明的图像和一个不透明的蒙版图像。使用 MetalPetal 和它的 MTIBlendWithMaskFilter 我可以创建一个输出图像,它正确地掩盖了输入图像,但它是不透明的黑色背景。

我希望输出图像有一个 alpha channel ,例如用透明像素代替黑色像素。

func mt_blend(image: UIImage, with mask: UIImage) -> UIImage {
let ciMaskImage = CIImage(cgImage: mask.cgImage!)
let mtiMaskImage = MTIImage(ciImage: ciMaskImage, isOpaque: true)
let mtiMask = MTIMask(content: mtiMaskImage)

let ciImage = CIImage(cgImage: image.cgImage!)
let mtiImage = MTIImage(ciImage: ciImage, isOpaque: true)

let contextOptions = MTIContextOptions()
let context = try! MTIContext(device: MTLCreateSystemDefaultDevice()!, options: contextOptions)

let blendFilter = MTIBlendWithMaskFilter()
blendFilter.inputMask = mtiMask
blendFilter.inputBackgroundImage = mtiMaskImage
blendFilter.inputImage = mtiImage

let outputImage = try! context.makeCGImage(from: blendFilter.outputImage!)
return UIImage(cgImage: outputImage)
}

问题似乎是我对 premultiplyingAlpha 的误解或误用。

输入图片:

enter image description here

蒙版图片:

enter image description here

输出图像:

enter image description here

最佳答案

您将混合滤镜的 backgroundImage 设置为 mask 不透明的图像。要获得透明背景,请将 backgroundImage 设置为透明颜色。

blendFilter.inputBackgroundImage = MTIImage.init(color: MTIColor.clear, sRGB: false, size: mtiImage.size)

MTIBlendWithMaskFilter 的输出图像尺寸将等于 inputBackgroundImage 的尺寸。根据需要设置大小。

关于ios - 如何使用 MetalPetal 遮盖图像并以透明方式输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64218840/

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