我正在尝试在c#中进行alpha混合。 所以我的实际代码是:
final.Red = (pencil.Red * pencil.Alpha) + (background.Red * (1.0f - pencil.Alpha));
final.Green = (pencil.Green * pencil.Alpha) + (background.Green * (1.0f - pencil.Alpha));
final.Blue = (pencil.Blue * pencil.Alpha) + (background.Blue * (1.0f - pencil.Alpha));
如果背景像素没有不透明度,这可以正常工作。 但是如果背景像素具有不透明度,那么颜色的计算是什么?
答案 0 :(得分:1)
好的,我自己做了。没有我想象的那么复杂。 Heres是我的解决方案:
final.Red = (pencil.Red * pencil.Alpha) + (background.Red * (1.0f - pencil.Alpha));
final.Green = (pencil.Green * pencil.Alpha) + (background.Green * (1.0f - pencil.Alpha));
final.Blue = (pencil.Blue * pencil.Alpha) + (background.Blue * (1.0f - pencil.Alpha));
final.Alpha = background.Alpha + (1.0f - background.Alpha * pencil.Alpha);
有了它,它正在处理每个背景不透明度。