GPUImageView的别名问题

时间:2013-04-10 19:11:04

标签: ios objective-c gpuimage

我在透明文本GPUImagePicture上混淆了基本GPUImagePicture,并将GPUImageView作为最终目标。这就是我正在做的事情:

textOverlay = [[GPUImagePicture alloc] initWithImage:self.rootViewController.previewImageTextOverlay];
GPUImageAlphaBlendFilter *textBlend = [[[GPUImageAlphaBlendFilter alloc] init] autorelease];
[upstreamOutputFilter addTarget:textBlend];
[textOverlay addTarget:textBlend];
[textBlend addTarget:gpuPreviewImageView];
[textOverlay processImage];

image http://www.kevinharringtonphoto.com/photos/i-m4Hrt6L/0/M/i-m4Hrt6L-M.png

如何删除别名?

我想要这个(我通过堆叠两个UIImages得到): image http://www.kevinharringtonphoto.com/photos/i-QqgWnhg/0/M/i-QqgWnhg-M.png

2 个答案:

答案 0 :(得分:1)

我调查过,发现这是GPUImageAlphaBlendFilter的一个错误。问题是着色器代码没有考虑第二个图像的预乘alpha。

这是一个快速修复:

替换

gl_FragColor = vec4(mix(textureColor.rgb, textureColor2.rgb, 
                        textureColor2.a * mixturePercent), textureColor.a);

使用:

if (textureColor2.a == 0.0) {
   gl_FragColor = textureColor;
} else {
   gl_FragColor = vec4(mix(textureColor.rgb, textureColor2.rgb / textureColor2.a,
                           mixturePercent * textureColor2.a), textureColor.a);
}

使用不涉及分支的着色器可能有一些很好的方法来做到这一点,但这样可以正常工作。

答案 1 :(得分:0)

Nuoji,这适合我,但我需要设置不透明度值

 filter = [[GPUImageAlphaBlendFilter alloc] init];
 [filter setMix:1];