2014-05-07 27 views
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]; 

}

回答

1

嗯,這是因爲,它們的大部分過濾器的上面實際上沒有做任何事情。您唯一的過濾器是screenBlendFilter,您可以將源圖片放入其中,然後將其中的一張圖片拉出。你從來沒有真正使用模糊的東西,所以當然不會影響任何輸出。

+0

我會如何連線它們?我試圖將所有這些過濾器應用到topLayer,然後使用屏幕混合過濾器將其與baseLayer混合。 –

+0

@JoelParker - 圖像從源流向目標。如果您想要將某個過濾器的輸出作爲輸入,則必須將源定位到輸出。您只在上面的一個過濾器中完成了這項工作,screenBlendFilter將兩個圖像作爲輸入,然後提取單個圖像輸出。如果你想要處理其他人,你需要通過正確的目標來構建他們的鏈。 –

+0

這就是讓我困惑的原因,因爲我認爲這是你所描述的鏈式過濾器:'[stillImageSourceTop addTarget:brightnessFilter]; [brightnessFilter addTarget:contrastFilter]; [contrastFilter addTarget:saturationFilter]; [saturationFilter addTarget:colorMatrixFilter]; [colorMatrixFilter addTarget:blurFilter]; [blurFilter addTarget:opacityFilter];'取出頂部圖像,然後將過濾器的輸出鏈接到下一個...我做錯了什麼? –