Я пытаюсь наложить одно изображение поверх другого изображения с помощью альфы и многократно смешать с помощью GPUImage. В 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, я могу заставить работать либо умножение, либо альфу, но я не могу заставить их работать оба. Я чувствую, что есть что-то с объединением фильтров GPUImage, чего я не понимаю. Вот одна из многих разных попыток того, что я делал с GPUImage, чтобы заставить это работать. Эта версия кода выполняет умножение, но не альфа-канал.
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