gpt4 book ai didi

iphone - 使用 GPUImage,我如何将图像分成 4 份并对所有 4 个角应用不同的过滤器并重新组合?

转载 作者:可可西里 更新时间:2023-11-01 06:15:41 24 4
gpt4 key购买 nike

我想要类似于 GPU Logo 的东西,每个角都有不同的滤镜。

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];

问题是当图像的一个角被裁剪时, Canvas 大小减半。

我相信这一半的大小随后会通过管道使用。

我的解决方法是通过变换再次将角移到一半,但这会产生 1/2 分辨率的输出图像。

最佳答案

我认为最简单的解决方案是,不要弄乱所有的裁剪和变换,而是创建一个着色器,将整个图像的 alpha 设置为 0,但要应用滤镜的象限除外。

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

对于每个象限:
应用效果滤镜 -> 应用设置的 alpha 滤镜 -> 与之前的 channel 进行过度混合

关于iphone - 使用 GPUImage,我如何将图像分成 4 份并对所有 4 个角应用不同的过滤器并重新组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18446905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com