有什么方法可以像在 iPhone 应用程序中那样使用 OpenGL ES 在 UIImage 上创建凹痕、收缩、扭曲、挤压等效果 PhotoTwist ?
是否有关于执行此操作的任何引用或指南?我不需要代码,只是有关如何执行此操作的引用。
最佳答案
进行这种图像处理的最高效方法是使用 OpenGL ES 2.0 着色器。再一次,如果我可以向您指出我的 GPUImage框架,它可以执行您描述的许多失真操作。对于那些缺失的,您可以编写自己的片段着色器。
我在那里的效果是凸起变形(使用 GPUImageBulgeDistortionFilter):
凹形失真(对前一个过滤器使用倒置比例参数):
漩涡变形(使用 GPUImageSwirlFilter):
最后,收缩失真(使用 GPUImagePinchDistortionFilter):
如果您查看用于每个滤镜的着色器,您会发现它们之间的数学运算非常相似。您应该能够对其进行调整,以从同一基础生成您自己的自定义效果。
将这些滤镜应用于 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/