GDI中的每像素每组件alpha混合

时间:2010-05-27 17:02:22

标签: windows gdi alpha blending direct2d

我有一个带有R,G,B颜色通道的24位位图和一个带有R,G,B alpha通道的24位位图。我想将第一个位图分别混合到GDI中的HDC或Direct2D中的RenderTarget和alpha通道。例如,假设对于一个像素,位图颜色是(192,192,192),HDC颜色是(0,255,255)并且alpha通道是(30,40,50)。最终的HDC颜色应为(22,245,242)。我知道我可以首先将HDC BitBlt到内存HDC,通过手动计算每个像素的颜色并最终返回BitBlt进行alpha混合。我只是想避免额外的blitting并让API完成它们的工作(因为它们在内核空间中更快)。

我想到的第一个想法是将源位图分成3个仅红色,仅绿色和仅蓝色的8位位图,进行正常的alpha混合,然后将3个输出位图合成到HDC中。但我找不到在Windows中本地进行拆分和组合的方法(Direct2D图层会有帮助吗?)。此外,分割和合成可能需要许多额外的复制。性能开销太高了。

或者也许在3遍中进行alpha混合。每次传递都应用一个通道的混合,同时保持另一个不变。

感谢您的任何评论。

编辑:我找到了question,答案应该是这个问题的好参考。但是,除了AC_SRC_OVER之外,不支持其他混合操作。为什么微软不改进他们的API?

1 个答案:

答案 0 :(得分:1)

我很确定Windows或OSX上的标准库不支持每通道alpha。您可能希望独立使用3个图层(将每个图层视为单独的32位图),然后将它们组合起来。