我在iOS上使用GPUImage。我无法使用GPUImageTransformFilter转换(缩放)GPUImagePicture并将其混合到视频中。
overlayImage = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"Sticker"] smoothlyScaleOutput:YES];
blendFilter = [GPUImageAlphaBlendFilter new];
transformFilter = [GPUImageTransformFilter new];
// [transformFilter forceProcessingAtSize:?????];
transformFilter.affineTransform = CGAffineTransformMakeScale(0.2f, 0.2f);
[overlayImage addTarget:transformFilter];
[videoCamera addTarget:blendFilter];
[overlayImage addTarget:blendFilter];
[overlayImage processImage];
[videoCamera startCameraCapture];
我得到的错误结果是图片显示未转换的图片 - 它仍处于完整尺寸,就像从未应用过变换滤镜一样。
转换的GPUImagePicture是否需要以与混合滤镜的其他内容完全相同的尺寸进行处理?
如果是这样,我该怎么做?我应该使用forceProcessingAtSize吗?我可以通过查询某些内容来获取大小,例如videoCamera会话吗?我尝试将forceProcessingAtSize设置为AVCaptureSessionPreset的大小,640x480,但这没有帮助。
由于
答案 0 :(得分:1)
您尚未将上述代码中的transformFilter
与任何内容相关联,因此会被忽略。我相信您需要更正您的代码才能阅读
[overlayImage addTarget:transformFilter];
[videoCamera addTarget:blendFilter];
[transformFilter addTarget:blendFilter];
如果您希望混合转换后的结果。
forceProcessingAtSize
在这里不会真正做到你想做的事情,因为它可以调整基础像素大小,而不是如何为混合提供。混合滤镜使用第一张图像的纵横比,然后拉伸第二张图像以适合该图像。这是我使用的相当简单的标准化纹理坐标的结果,我遗憾地从未添加选项来保留第二张图像中的宽高比。