(Stack Overflow的第一篇文章 - 所以,嗨,紧张地挥动')
我使用GPUImage库取得了一些成功 - 并设法使用swift获得了一个处理静态图像的简单过滤器。
但是我在尝试将多个过滤器链接在一起时遇到了问题。图书馆中包含的示例似乎并未涵盖此内容。有很多客观的C例子,但不是很快。
任何人都可以举一个如何申请的例子:
2个混合滤镜加上亮度,对比度和饱和度滤镜到单个静态图像?
我认为这足以涵盖Swift中库的大多数用途。感谢。
答案 0 :(得分:4)
在Swift中分配和链接过滤器与在Objective-C中相同,它只是语法转换。例如,以下是如何将两个静止图像输入链接到Objective-C中的混合滤镜,然后将该混合的结果定向到对比度滤镜,捕获最终图像:
GPUImageOverlayBlendFilter *blendFilter = [[GPUImageOverlayBlendFilter alloc] init];
[stillImageSource1 addTarget:blendFilter];
[stillImageSource2 addTarget:blendFilter];
GPUImageContrastFilter *contrastFilter = [[GPUImageContrastFilter alloc] init];
[blendFilter addTarget:contrastFilter];
[contrastFilter useNextFrameForImageCapture];
[stillImageSource1 processImage];
[stillImageSource2 processImage];
UIImage *currentFilteredImage = [contrastFilter imageFromCurrentFramebuffer];
这与Swift相同:
let blendFilter = GPUImageOverlayBlendFilter()
stillImageSource1.addTarget(blendFilter)
stillImageSource2.addTarget(blendFilter)
let contrastFilter = GPUImageContrastFilter()
blendFilter.addTarget(contrastFilter)
contrastFilter.useNextFrameForImageCapture()
stillImageSource1.processImage()
stillImageSource2.processImage()
let currentFilteredImage = contrastFilter.imageFromCurrentFramebuffer()
正如您所看到的,它是所有语法,在您实际调用内容方面没有任何不同。您可以使用Objective-C示例代码作为您想要执行的操作的基础,并在Swift等效项中重写它。我随框架提供的Swift示例要么非常简单(在实时视频上使用单个过滤器的小应用程序),要么相当复杂(我的测试用例应用程序执行框架中的每个过滤器和操作)。
答案 1 :(得分:1)
当您使用演示中的FilterOperations.swift类时,您可以像这样初始化过滤器:
// Quick reference to the used filter configurations
var filterExposure = filterOperations.firstMatch {item in return item.listName == "Exposure"}!
var filterHighlightShadow = filterOperations.firstMatch {item in return item.listName == "Highlights and shadows"}!
var filterSaturation = filterOperations.firstMatch {item in return item.listName == "Saturation"}!
var filterContrast = filterOperations.firstMatch {item in return item.listName == "Contrast"}!
var filterAdaptiveThreshold = filterOperations.firstMatch {item in return item.listName == "Adaptive threshold"}!
然后像这样设置这些过滤器:
(self.filterExposure.filter as GPUImageExposureFilter).exposure = 0.8 // -10 - 10
(self.filterHighlightShadow.filter as GPUImageHighlightShadowFilter).highlights = 1.0 // 0 - 1
(self.filterSaturation.filter as GPUImageSaturationFilter).saturation = 0.0 // 0 - 2
(self.filterContrast.filter as GPUImageContrastFilter).contrast = 2.0 // 0 - 4
(self.filterAdaptiveThreshold.filter as GPUImageAdaptiveThresholdFilter).blurRadiusInPixels = 8.0
然后你可以像这样链接过滤器:
videoCamera.addTarget((self.filterExposure.filter as GPUImageInput))
self.filterExposure.filter.addTarget((self.filterHighlightShadow.filter as GPUImageInput))
self.filterHighlightShadow.filter.addTarget((self.filterSaturation.filter as GPUImageInput))
self.filterSaturation.filter.addTarget((self.filterContrast.filter as GPUImageInput))
self.filterContrast.filter.addTarget((self.filterAdaptiveThreshold.filter as GPUImageInput))
self.filterAdaptiveThreshold.filter.addTarget(self.filterView)