1

最終ターゲットとして GPUImageView を使用してベース GPUImagePicture とブレンドされた透明なテキスト GPUImagePicture で奇妙な黒いエイリアシングが発生します。これは私がやっていることです:

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 )

エイリアシングを削除するにはどうすればよいですか?

これが欲しい(2つのUIImageを重ねることで得られる):( ソース:kevinharringtonphoto.com画像

4

2 に答える 2

1

調査したところ、これは GPUImageAlphaBlendFilter のバグであることがわかりました。問題は、シェーダー コードが 2 番目のイメージの事前に乗算されたアルファを考慮していないことです。

ここに簡単な修正があります:

交換

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

Nuoji、これは私にとってはうまくいきますが、不透明度の値を設定する必要があります

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