【发布时间】:2014-01-20 05:08:54
【问题描述】:
我正在尝试通过将图像效果应用于MKMapView 的屏幕截图,在我的玻璃中使用 iOS 7 风格的玻璃效果。 This UIImage category,由 Apple 提供,是我用作基准的。此方法使源图像去饱和,应用淡色,并使用输入 vals 进行大量模糊:
[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];
这会产生我正在寻找的效果,但花费的时间太长——在.3 和 .5 秒之间才能在 iPhone 4 上呈现。
我想使用出色的 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 时,它变成了网格状,几乎就像一个万花筒。通过放大第二张图像,您实际上可以看到此处的网格。我试图模仿的色调似乎只是洗掉了图像,而不是叠加和混合,我认为 Apple 示例正在这样做。
我尝试根据@BradLarson 在another SO question 中制作的cmets 设置过滤器。是我使用了错误的GPUImage 过滤器来重现这种效果,还是我只是设置错误?
【问题讨论】:
-
你试过github.com/JagCesar/iOS-blur吗?虽然只能在 iOS7 下运行,但它很棒。
-
iOS-Blur 不是一个可行的解决方案。你不知道苹果在幕后做了什么来使这项工作,它在 iOS 6 上不起作用。
标签: ios image-processing mkmapview core-image gpuimage