2013-04-10 61 views
1

我得到奇怪的黑色別名透明文本GPUImagePicture與GPUImagePicture與GPUImageView作爲最終目標混合。這是我在做什麼:別名問題與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

這可能是與預乘alpha的問題,如問題這裏提到:https://github.com/BradLarson/GPUImage/issues/768,在這裏:https://github.com/BradLarson/GPUImage/issues/907。我可能沒有在圖像上處理這種權利,但有些反鋸齒邊緣。 – 2013-04-10 21:34:46

+0

感謝您的鏈接,但沒有任何一個運氣。我嘗試更改此行以使用預乘alpha:cgImageFromBytes = CGImageCreate((int)currentFBOSize.width,(int)currentFBOSize.height,8,32,4 *(int)currentFBOSize.width,defaultRGBColorSpace,kCGBitmapByteOrderDefault | kCGImageAlphaLast,dataProvider,NULL ,NO,kCGRenderingIntentDefault); – kev 2013-04-15 21:51:39

回答

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

有可能是一些很好的方式與不涉及分支的着色器要做到這一點,但是這工作正常。

+0

謝謝@Nuoji,工作! – kev 2013-04-16 19:23:04

0

諾基,這對我的作品,但我需要設置不透明度值

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