iOS Zoom/Distort 使用 CIFilter 的图像的特定部分
iOS Zoom/Distort a particular part of the image using CIFilter
用例是检测图像中的某些东西,zoom/distort-outward 就像您通过放大镜看一样。
现在我知道放大的点了,但我需要一个 CIFilter 可以做同样的事情。
尝试了 CIHoleDistortion 但没有成功。该文档对我来说似乎没问题,它应该可以工作,但它只会创建一个黑洞,并且它周围的区域会扭曲。
let distortion = CIFilter(name: "CIHoleDistortion")
distortion.setValue(sourceImage, forKey: kCIInputImageKey)
distortion.setValue(CIVector.init(cgPoint: CGPoint.init(x: 200, y: 200)), forKey: "inputCenter")
distortion.setValue(NSNumber.init(value: 100), forKey: "inputRadius")
测试结果如下:
CIBumpDistortion
怎么样?
CIBumpDistortion 就像上面 Frank 提到的,但是 scale
参数实际上是这样工作的: scale < 0
-> concave; scale > 0
-> 凸。
另一个(也许更好)选项是使用 CIGlassLozenge
过滤器:
将 inputRefraction
设置为略大于 1 的值(例如 1.06)
将inputPoint0
和inputPoint1
都与缩放点的坐标对齐
调整半径以获得所需的效果。附例使用半径1000.
如果您想实时使用此过滤器(以及 250 个 CIFilters 中的任何其他过滤器),请查看此应用:https://apps.apple.com/us/app/filter-magic/id1594986951
用例是检测图像中的某些东西,zoom/distort-outward 就像您通过放大镜看一样。
现在我知道放大的点了,但我需要一个 CIFilter 可以做同样的事情。
尝试了 CIHoleDistortion 但没有成功。该文档对我来说似乎没问题,它应该可以工作,但它只会创建一个黑洞,并且它周围的区域会扭曲。
let distortion = CIFilter(name: "CIHoleDistortion")
distortion.setValue(sourceImage, forKey: kCIInputImageKey)
distortion.setValue(CIVector.init(cgPoint: CGPoint.init(x: 200, y: 200)), forKey: "inputCenter")
distortion.setValue(NSNumber.init(value: 100), forKey: "inputRadius")
测试结果如下:
CIBumpDistortion
怎么样?
CIBumpDistortion 就像上面 Frank 提到的,但是 scale
参数实际上是这样工作的: scale < 0
-> concave; scale > 0
-> 凸。
另一个(也许更好)选项是使用 CIGlassLozenge
过滤器:
将
inputRefraction
设置为略大于 1 的值(例如 1.06)将
inputPoint0
和inputPoint1
都与缩放点的坐标对齐调整半径以获得所需的效果。附例使用半径1000.
如果您想实时使用此过滤器(以及 250 个 CIFilters 中的任何其他过滤器),请查看此应用:https://apps.apple.com/us/app/filter-magic/id1594986951