我正在用Android开发一个应用程序,该应用程序必须在上传的图像上应用棕褐色效果。应用程序已经存在。我在使用Sepia效果的快速代码中遇到了一个函数。
func applySepia() -> UIImage? {
filterValue = 1
let image = self.processPixels(filterValue: filterValue)
guard let cgimg = image?.cgImage else {
print("imageView doesn't have an image!")
return self
}
let value = -filterValue
print("sliderValue = \(filterValue)")
print("value = \(value)")
let openGLContext = EAGLContext(api: .openGLES2)
let context = CIContext(eaglContext: openGLContext!)
let coreImage = CIImage(cgImage: cgimg)
let filter = CIFilter(name: "CISepiaTone")
filter?.setValue(coreImage, forKey: kCIInputImageKey)
filter?.setValue(value, forKey: kCIInputIntensityKey)
if let output = filter?.value(forKey: kCIOutputImageKey) as? CIImage {
let cgimgresult = context.createCGImage(output, from: output.extent)
let image = UIImage(cgImage: cgimgresult!)
return image.applySharpness(filterValue:filterValue)
}
return self
}
以上功能使用“ CISepiaTone”过滤器实现棕褐色调。在这里,“ kCIInputIntensityKey”以-1的形式传递,我无法理解。根据文档,它的值在0到1之间,但是它如何允许为负值。由于具有此强度值,因此生成的图像确实如下所示:
我可以使用https://github.com/StevenRudenko/ColorMartix/blob/master/src/com/sample/colormatrix/Main.java在android中实现第二张图像(实际上是棕褐色调)
但是,我在android中找不到任何可用于以负强度实现棕褐色调的内置方法或类,就像它在IOS Swift中的应用方式一样。这是我的问题: