0
我有分層的過濾器,它們都與我使用的圖像看起來很不錯,但如果我更改高斯模糊參數或者更高或更低,則模糊效果中沒有可見差異。我究竟做錯了什麼 ?GPUImageGaussianBlurFilter似乎不適用於分層過濾器
這裏是我的代碼:
GPUImageView *finalView;
- (void)viewDidLoad
{
[super viewDidLoad];
UIImage *topLayer = [UIImage imageNamed:@"Glass.png"];
UIImage *baseLayer = [UIImage imageNamed:@"BasePhoto.png"];
GPUImagePicture *stillImageSourceTop = [[GPUImagePicture alloc] initWithImage:topLayer];
GPUImagePicture *stillImageSourceBottom = [[GPUImagePicture alloc] initWithImage:baseLayer];
GPUImageScreenBlendFilter *screenBlendFilter = [[GPUImageScreenBlendFilter alloc] init];
GPUImageBrightnessFilter *brightnessFilter = [[GPUImageBrightnessFilter alloc] init];
GPUImageContrastFilter *contrastFilter = [[GPUImageContrastFilter alloc] init];
GPUImageSaturationFilter *saturationFilter = [[GPUImageSaturationFilter alloc] init];
GPUImageColorMatrixFilter *colorMatrixFilter = [[GPUImageColorMatrixFilter alloc] init];
GPUImageOpacityFilter *opacityFilter = [[GPUImageOpacityFilter alloc] init];
opacityFilter.opacity = 0;
GPUImageGaussianBlurFilter *blurFilter = [[GPUImageGaussianBlurFilter alloc]init];
blurFilter.texelSpacingMultiplier = 4.0;
blurFilter.blurRadiusInPixels = 200.0;
blurFilter.blurPasses = 4;
[stillImageSourceTop addTarget:brightnessFilter];
[brightnessFilter addTarget:contrastFilter];
[contrastFilter addTarget:saturationFilter];
[saturationFilter addTarget:colorMatrixFilter];
[colorMatrixFilter addTarget:blurFilter];
[blurFilter addTarget:opacityFilter];
[stillImageSourceTop processImage];
[opacityFilter useNextFrameForImageCapture];
UIImage *topLayerImage = [opacityFilter imageFromCurrentFramebuffer];
GPUImagePicture *stillImageSourceTopWithFilters = [[GPUImagePicture alloc] initWithImage:topLayerImage];
[stillImageSourceBottom addTarget:screenBlendFilter];
[stillImageSourceTopWithFilters addTarget:screenBlendFilter];
[screenBlendFilter useNextFrameForImageCapture];
[stillImageSourceBottom processImage];
UIImage *mergedlayeredimage = [screenBlendFilter imageFromCurrentFramebuffer];
[finalImageView setImage:mergedlayeredimage];
}
我會如何連線它們?我試圖將所有這些過濾器應用到topLayer,然後使用屏幕混合過濾器將其與baseLayer混合。 –
@JoelParker - 圖像從源流向目標。如果您想要將某個過濾器的輸出作爲輸入,則必須將源定位到輸出。您只在上面的一個過濾器中完成了這項工作,screenBlendFilter將兩個圖像作爲輸入,然後提取單個圖像輸出。如果你想要處理其他人,你需要通過正確的目標來構建他們的鏈。 –
這就是讓我困惑的原因,因爲我認爲這是你所描述的鏈式過濾器:'[stillImageSourceTop addTarget:brightnessFilter]; [brightnessFilter addTarget:contrastFilter]; [contrastFilter addTarget:saturationFilter]; [saturationFilter addTarget:colorMatrixFilter]; [colorMatrixFilter addTarget:blurFilter]; [blurFilter addTarget:opacityFilter];'取出頂部圖像,然後將過濾器的輸出鏈接到下一個...我做錯了什麼? –