1

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

图片
(来源:kevinharringtonphoto.com

如何消除混叠?

我想要这个(通过堆叠两个 UIImages 得到):( 来源:kevinharringtonphoto.com图片

4

2 回答 2

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);
}

可能有一些不错的方法可以使用不涉及分支的着色器来执行此操作,但这很好用。

于 2013-04-16T09:03:00.240 回答
0

诺基亚,这对我有用,但我需要设置不透明度值

 filter = [[GPUImageAlphaBlendFilter alloc] init];
 [filter setMix:1];
于 2014-11-13T01:02:14.377 回答