引用:
原帖由 sfsuvival 于 2010-03-22 02:41 发表
...我对图像处理的认识不深
这只是研究出来的结果
我也不知道那些合成模式的原理...
这个可能是因为有用min
所以即使dest ÷ ( 1.0 - src ) 是无限大也不管了...
老实说我弄不清什么是alpha blending.. ...
我比较认同αo是255的opaque,而非来源f(alpha,alpha)
也就是你给的文章的Alpha blending
java官方的desktop的BlendComposite也是这个实现(预乘alpha是个浮点参数,对像素做这样的操作,result做前期blend处理,在AlphaBlending中result是否等于src?),而java的标准库里的AlphaComposite就比较晕头转向了
blender.blend(srcPixel, dstPixel, result);
// mixes the result with the opacity
dstPixels[x] = ((int) (dstPixel[3] + (result[3] - dstPixel[3]) * alpha) & 0xFF) << 24 |
((int) (dstPixel[0] + (result[0] - dstPixel[0]) * alpha) & 0xFF) << 16 |
((int) (dstPixel[1] + (result[1] - dstPixel[1]) * alpha) & 0xFF) << 8 |
(int) (dstPixel[2] + (result[2] - dstPixel[2]) * alpha) & 0xFF;
而BlendComposite的COLOR_DODGE是这样的
public void blend(int[] src, int[] dst, int[] result) {
result[0] = src[0] == 255 ? 255 :
Math.min((dst[0] << 8) / (255 - src[0]), 255);
result[1] = src[1] == 255 ? 255 :
Math.min((dst[1] << 8) / (255 - src[1]), 255);
result[2] = src[2] == 255 ? 255 :
Math.min((dst[2] << 8) / (255 - src[2]), 255);
result[3] = Math.min(255, src[3] + dst[3] - (src[3] * dst[3]) / 255);
}
与kr2doc区别就在dest要x256
x256我看与ps效果是一样的,不乘明显错误
[
本帖最后由 haibara 于 2010-03-22 11:19 编辑 ]