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

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

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

或者也许做3次alpha混合。 每个通道应用一个通道的混合,而另一个通道保持不变。

感谢您的任何评论。

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

我很确定,在Windows或OSX的标准库中不支持每通道alpha。 您可能需要独立处理3个图层(将每个图层作为单独的32位图处理),而不是将它们组合起来。