2010-05-27 26 views
1

我有一个带有R,G,B颜色通道和R,G,B alpha通道的24位位图的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,然后手动计算每个像素的颜色,最后返回BitBlt进行alpha混合。我只是想避免额外的blitting,并让API完成他们的工作(因为他们在内核空间中更快)。GDI中的每像素每分量alpha混合

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

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

感谢您的任何评论。

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

回答

1

我很确定每个通道的alpha在Windows或OSX的标准库中都不被支持。您可能需要独立处理3个图层(将每个图层作为单独的32位位图处理),然后编写它们。

+0

谢谢。虽然3 alpha混合已经很昂贵,但真正的问题是如何组合各个通道的位图。自定义DIBSection可能会更容易。 只有AlphaBlend具有更多操作类型... – 2010-06-21 11:04:59