为什么SwiftUI中Image和CIImage之间的亮度过滤器不同?

问题描述

我正在调整图像的亮度。

首先,我使用 SwiftUI图像显示图像:

Image(xxx)
    .brightness(-0.5)

然后,我使用 CIImage 通过这种亮度调整来生成新图像:

func drawPic(img: UIImage) -> UIImage {
    let cgimage: CGImage = img.cgImage!
    let image = CIImage(cgImage: cgimage)
    let parameters = [
        "inputBrightness": Float(-0.5)
    ]
    let outputimage = image.applyingFilter("CIColorControls",parameters: parameters)
    let contextv = CIContext(options: nil)
    let CgPic = contextv.createCGImage(outputimage,from: outputimage.extent)!
    return UIImage(cgImage: CgPic)
}

但是当我预览这些图像时,我发现它们的颜色并不相同:

Screenshot

谁能告诉我为什么以及如何解决这个问题?

所有代码

import SwiftUI
import UIKit
import CoreImage
import CoreImage.CIFilterBuiltins

struct Testimage: View {
    var body: some View {
        vstack{
            Image("colorcircle2").resizable().frame(width: 200,height: 200,alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)
            Text("Original Image").padding(.bottom,24.0)
            Image("colorcircle2").resizable().frame(width: 200,alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/).brightness(-0.5)
            Text("SwiftUI Image").padding(.bottom,24.0)
            Image(uiImage: drawPic(img: UIImage(imageLiteralResourceName: "colorcircle2"))).resizable().frame(width: 200,alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)
            Text("CIImage").padding(.bottom,24.0)
        }
    }
}

func drawPic(img: UIImage) -> UIImage {
    let cgimage: CGImage = img.cgImage!
    let image = CIImage(cgImage: cgimage)
    let parameters = [
        "inputBrightness": Float(-0.5)
    ]
    let outputimage = image.applyingFilter("CIColorControls",from: outputimage.extent)!
    return UIImage(cgImage: CgPic)
}


struct Testimage_Previews: PreviewProvider {
    static var previews: some View {
        Testimage()
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)