我正在尝试通过将图像效果应用于 MKMapView
的截图来在我的玻璃中使用iOS 7风格的玻璃效果。这是苹果提供的UIImage类别,是我使用的基准。该方法会使源图像变得无色,应用着色和模糊,并使用输入值进行大量模糊处理:
[image applyBlurWithRadius:10.0
tintColor:[UIColor colorWithRed:229/255.0f green:246/255.0f blue:255/255.0f alpha:0.33]
saturationDeltaFactor:0.66
maskImage:nil];
这产生了我想要的效果,但太慢了——在 iPhone 4上渲染需要 .3
到 .5
秒。
我想使用优秀的GPUImage
,因为我的初步尝试大约快了 5-10 倍,但我似乎做不对。
GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:image];
GPUImageSaturationFilter *saturationFilter = [[GPUImageSaturationFilter alloc] init];
saturationFilter.saturation = 0.33; // 1.0 - 0.66;
[stillImageSource addTarget:saturationFilter];
GPUImageMonochromeFilter *monochromeFilter = [[GPUImageMonochromeFilter alloc] init];
[monochromeFilter setColor:(GPUVector4){229/255.0f, 246/255.0f, 1.0f, 0.33f}];
[monochromeFilter setIntensity:0.2];
[saturationFilter addTarget:monochromeFilter];
GPUImageFastBlurFilter *blurFilter = [[GPUImageFastBlurFilter alloc] init];
blurFilter.blurSize = 2;
blurFilter.blurPasses = 3;
[monochromeFilter addTarget:blurFilter];
[saturationFilter prepareForImageCapture];
[monochromeFilter prepareForImageCapture];
[stillImageSource processImage];
image = [blurFilter imageFromCurrentlyProcessedOutput];
这会生成一张接近但不完全相同的图片。
模糊似乎不够深,但当我尝试将blurSize
增加时,它变得像网格一样,几乎像万花筒。你可以通过放大第二幅图像来看到这个网格。我试图模仿的色调似乎只是把图像冲淡了,而不是像苹果的例子中那样叠加和融合。
我已经按照@BradLarson在另一个SO问题中的评论设置了滤镜。我是在错误地使用GPUImage
滤镜以重现这种效果,还是只是设置它们时出了问题?