iphone - 如何使用 OpenGL ES 对 UIImage 应用变形?

标签 iphone objective-c ios opengl-es core-graphics

有什么方法可以像在 iPhone 应用程序中那样使用 OpenGL ES 在 UIImage 上创建凹痕、收缩、扭曲、挤压等效果 PhotoTwist

是否有关于执行此操作的任何引用或指南?我不需要代码,只是有关如何执行此操作的引用。

最佳答案

进行这种图像处理的最高效方法是使用 OpenGL ES 2.0 着色器。再一次,如果我可以向您指出我的 GPUImage框架,它可以执行您描述的许多失真操作。对于那些缺失的,您可以编写自己的片段着色器。

我在那里的效果是凸起变形(使用 GPUImageBulgeDistortionFilter):

Bulge distortion

凹形失真(对前一个过滤器使用倒置比例参数):

Concave distortion

漩涡变形(使用 GPUImageSwirlFilter):

Swirl distortion

最后,收缩失真(使用 GPUImagePinchDistortionFilter):

Pinch distortion

如果您查看用于每个滤镜的着色器,您会发现它们之间的数学运算非常相似。您应该能够对其进行调整,以从同一基础生成您自己的自定义效果。

将这些滤镜应用于 UIImage 相当容易。如果您只想使用一个过滤器,则可以执行以下操作:

UIImage *inputImage = [UIImage imageNamed:@"test.jpg"];
GPUImageBulgeDistortionFilter *stillImageFilter = [[GPUImageBulgeDistortionFilter alloc] init];
UIImage *quickFilteredImage = [stillImageFilter imageByFilteringImage:inputImage];

这将从磁盘创建一个 UIImage,使用 OpenGL ES 对其进行过滤,并返回一个过滤后的 UIImage 供您使用。如果您想执行更高级的链式效果,您可以使用 GPUImagePicture 和自定义过滤器管道,或者您可以使用不同的输入源来过滤实时摄像机视频或电影。

此项目的源代码可在上面的链接中获得,并遵循 BSD 许可,因此您可以深入研究它以了解如何将数据传入和传出 OpenGL ES 以及如何执行这些类型的过滤器。

关于iphone - 如何使用 OpenGL ES 对 UIImage 应用变形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9886843/

相关文章:

iphone - 如何每次选择/设置选取器 View 中的选定行作为默认选定行

iphone - 出现异常 "message sent to deallocated instance"

ios - 锁定设备时记录音频

ios - 在新 Storyboard中将值传递给 UIViewController - Swift

ios - Swift,尝试按对象属性类型字符串对数组进行排序,对象符合可比协议(protocol)

iphone - 垂直对齐 CATextLayer 中的文本?

iphone - AudioStreamer 和 AVAudioRecorder 不能一起工作

ios - SceneKit 3D 标记增强现实 iOS

ios - UIDocument closeWithCompletionHandler : completes immediately

当画外音打开时,html 日期和时间选择器不会在 ios 浏览器中打开