如何反转UIView特定区域的颜色?

Dey*_*een 17 uiview ios swift

模糊视图的一部分很容易,请记住,如果后面的视图内容发生变化,模糊也会实时变化.

我的问题

  1. 如何制作反转效果,你可以把它放在一个视图上,后面的内容会有反转的颜色

  2. 如何添加一个能够知道背后像素平均颜色的效果?

一般来说,如何访问像素并操纵它们?我的问题不是关于UIImageView,一般询问UIView ..

有些库可以做类似的事情,但是它们非常慢而且运行不像模糊一样平滑!

谢谢.

dfd*_*dfd 8

如果您知道如何编写CIColorKernel代码,那么您将拥有所需的代码.

  • Core Image有几个模糊滤镜,所有这些都使用GPU,它将为您提供所需的性能.

  • CIAreaAverage将为您提供指定矩形区域的平均颜色.

核心图像过滤器

这是关于你可以编写的最简单的CIColorKernel.它会为图像中的每个像素交换红色和绿色值(请注意"grba"而不是"rgba"):

kernel vec4 swapRedAndGreenAmount(__sample s) {
    return s.grba;
}
Run Code Online (Sandbox Code Playgroud)

要将它放入CIColorKernel,只需使用以下代码行:

let swapKernel = CIKernel(string:
    "kernel vec4 swapRedAndGreenAmount(__sample s) {" +
    "return s.grba;" +
    "}"
Run Code Online (Sandbox Code Playgroud)

@ tww003有很好的代码将视图层转换为UIImage.假设您调用图像myUiImage,要执行此swapKernel,您可以:

let myInputCi = CIImage(image: myUiImage)
let myOutputCi = swapKernel.apply(withExtent: myInputCi, arguments: myInputCi)
Let myNewImage = UIImage(ciImage: myOutputCi)
Run Code Online (Sandbox Code Playgroud)

就是这样.你可以做更多(包括使用CoreGraphics等),但这是一个好的开始.

最后一点,您可以链接各个过滤器(包括手写颜色,扭曲和一般内核).如果需要,您可以使用模糊链接基础视图上的颜色平均值,并将您希望的任何类型的反转作为单个过滤器/效果进行链接.