使用GPUImage,如何将图像分割为4并对所有4个角应用不同的滤镜并重新组合?

时间:2013-08-26 14:47:28

标签: iphone ios objective-c gpuimage

我想要类似于GPU徽标,每个角落都有不同的过滤器。

GPU Logo

到目前为止,我已经设法实现了这一目标,但图像尺寸是原始尺寸的一半。这是我的代码的简化:

_cropTopLeft = [[GPUImageCropFilter alloc] 
                initWithCropRegion:CGRectMake(0.0, 0.0, 0.5, 0.5)];

CGAffineTransform topLeftTransform = CGAffineTransformMakeTranslation(-1, -1);
topLeftTransform = CGAffineTransformScale(topLeftTransform, 0.5, 0.5);
_transformTL = [[GPUImageTransformFilter alloc] init];
_transformTL.affineTransform = topLeftTransform;


// Set up the pipeline: image -> crop -> transform 
//   I don't apply any effects to the corners for now, 
//   just try to recreate the original image

[imageSource addTarget:_cropTopLeft];
[_cropTopLeft addTarget:_transformTL];


// Same with the other corners... TR, BL & BR



// Recombine
// Can only apply 2 inputs to a blend filter, so combine using 3 filteres
// The blend filteres are `GPUImageNormalBlendFilter` instances

[_transformTL addTarget:_blendFilterTop];
[_transformTR addTarget:_blendFilterTop];
[_transformBL addTarget:_blendFilterBottom];
[_transformBR addTarget:_blendFilterBottom];

[_blendFilterTop addTarget:_blendFilterAll];
[_blendFilterBottom addTarget:_blendFilterAll];

[_blendFilterAll addTarget:_myGPUImageView];

问题是当裁剪图像的一角时,画布尺寸减半。

我相信这个半尺寸然后通过管道使用。

我的工作是使用变换再次转到半角,但这会产生1/2分辨率的输出图像。

1 个答案:

答案 0 :(得分:0)

我认为最简单的解决方案是,创建一个着色器,将整个图像上的alpha设置为0,除了要应用滤镜的象限外。

您的过滤器链看起来像这样......

每个象限:
应用效果滤镜 - >应用set alpha过滤器 - >与之前的传球进行过度混合