在Swift中更改CoreImage中混合图像的alpha的最优化方法是什么

问题描述 投票:0回答:1

我想用darkenBlendMode混合两个图像,并使用Slider来操纵第一张和第二张图像的Alpha。不幸的是,我的方法在iPhone 6S上比较落后。我知道问题出在每次Slider触摸时都调用“ loadImage”函数,但是我不知道如何使它不那么麻烦。你知道如何修理吗?

extension UIImage {

    func alpha(_ value:CGFloat) -> UIImage {
        UIGraphicsBeginImageContextWithOptions(size, false, scale)
        draw(at: CGPoint.zero, blendMode: .normal, alpha: value)
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return newImage!
    }
}

struct ContentView: View {

    @State private var image: Image?
    @State private var opacity: CGFloat = 0
    let context = CIContext()

    var body: some View {

        return VStack(alignment: .center) {
            image?
                .resizable()
                .padding(14.0)
                .scaledToFit()

            Slider(value: Binding(
                get: {
                    self.opacity
                },
                set: {(newValue) in
                      self.opacity = newValue
                      self.loadImage()
                }
            ), in: -0.5...0.5)
        }
        .onAppear(perform: loadImage)

    }

    func loadImage(){
        let uiInputImage = UIImage(named: "photo1")!.alpha(0.5 + opacity)

        let uiBackgroundInputImage = UIImage(named: "photo2")!.alpha(0.5 - opacity)

        let ciInputImage = CIImage(image: uiInputImage)
        let ciBackgroundInputImage = CIImage(image: uiBackgroundInputImage)


        let currentFilter = CIFilter.darkenBlendMode()

        currentFilter.inputImage = ciInputImage

        currentFilter.backgroundImage = ciBackgroundInputImage

        guard let blendedImage = currentFilter.outputImage else {return}

        if let cgBlendedImage = context.createCGImage(blendedImage, from: blendedImage.extent){
            let uiblendedImage = UIImage(cgImage: cgBlendedImage)



            image = Image(uiImage: uiblendedImage)
        }
    }
}
ios swift core-image
1个回答
0
投票

您可以使用CIColorMatrix过滤器来更改图像的Alpha,而无需再次加载位图数据:

CIColorMatrix
© www.soinside.com 2019 - 2024. All rights reserved.