我在透明文本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
答案 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];