我正在尝试使用GPUImage将alpha图像与多个混合叠加在另一个图像的顶部。在Core Graphics中,我正在做的事情。
CGContextRef ctx = UIGraphicsGetCurrentContext();
UIImage* baseImage = ...;
UIImage* overImage = ...;
CGSize size = baseImage.size;
// Draw the base image
CGContextDrawImage(ctx, CGRectMake(0, 0, size.width, size.height), baseImage.CGImage);
//Draw the overlay
CGContextSetAlpha(ctx, .5);
CGContextSetBlendMode(ctx, kCGBlendModeMultiply);
CGContextDrawImage(ctx, CGRectMake(0, 0, size.width, size.height), overImage.CGImage);
当我尝试使用GPUImage做同样的事情时,我可以得到乘法或alpha工作,但我不能让它们都工作。我觉得有一些东西与我不理解的GPUImage过滤器相结合。以下是我使用GPUImage进行此操作的许多不同尝试之一。这个版本的代码正在进行乘法而不是alpha。
GPUImagePicture *pictureOverlay = [[GPUImagePicture alloc] initWithImage:overImage];
GPUImageOpacityFilter* opacityFilter = [[GPUImageOpacityFilter alloc] init];
opacityFilter.opacity = .5;
[pictureOverlay addTarget:opacityFilter];
[pictureOverlay processImage];
pictureOverlay = [[GPUImagePicture alloc] initWithImage:[opacityFilter imageFromCurrentlyProcessedOutput]];
GPUImagePicture *pictureBase = [[GPUImagePicture alloc] initWithImage:baseImage];
GPUImageMultiplyBlendFilter *filter = [[GPUImageMultiplyBlendFilter alloc] init];
[pictureBase addTarget:filter];
[pictureOverlay addTarget:filter];
UIImage* finalImage = [filter imageFromCurrentlyProcessedOutput];
非常感谢任何帮助。
以下是我使用Core Graphics进行处理时的图像。
以下是我使用GPUImage时的结果
答案 0 :(得分:1)
尝试以下操作,我目前正在使用GPUImage,我认为以下内容对您有用:
GPUImagePicture *pictureBase = [[GPUImagePicture alloc] initWithImage:baseImage];
GPUImageMultiplyBlendFilter *filter = [[GPUImageMultiplyBlendFilter alloc] init];
[pictureBase addTarget:filter];
[pictureBase processImage];
GPUImagePicture *pictureOverlay = [[GPUImagePicture alloc] initWithImage:overImage];
GPUImageOpacityFilter* opacityFilter = [[GPUImageOpacityFilter alloc] init];
opacityFilter.opacity = .5;
[pictureOverlay addTarget:opacityFilter];
[opacityFilter addTarget:filter];
[pictureOverlay processImage];
UIImage* finalImage = [filter imageFromCurrentlyProcessedOutput];
它就像一个管道,其中一个过滤器的结果是下一个过滤器的输入。