原图
把上面那张图加到oF里面,使用ofEnableBlendMode(OF_BLENDMODE_SCREEN);进行混合
左半部分使用的是原始的图片,可以看出原来图片上方透明的部分出现了莫名的色块。
右半部分是处理过后的。
右半部分是处理过后的。
可以看出PS在处理透明部分的RGB值是有点溢出的(色值随机?),所以导致用一些混合方式会出现这种情况,比如上面的SCREEN混合方式,相当于OpenGL的:
glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE);
glBlendEquation(GL_FUNC_ADD);
也就是
(sR*(1-dR)) + (dR*1)=rR
(sG*(1-dG)) + (dG*1)=rG
(sB*(1-dB)) + (dB*1)=rB
(sA*(1-dA)) + (dA*1)=rA
glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE);
glBlendEquation(GL_FUNC_ADD);
也就是
(sR*(1-dR)) + (dR*1)=rR
(sG*(1-dG)) + (dG*1)=rG
(sB*(1-dB)) + (dB*1)=rB
(sA*(1-dA)) + (dA*1)=rA
解决方式:把原图的RGB乘以Alpha就正常了
自己写了个程序修正像素的错误,点击画面左边选择图片,点击右边保存修复后的。
FixedPsPNGFile 密码: cf2l