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

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

或者也许在3次中进行Alpha混合。每次通过将一个通道的混合涂抹,同时维护其他2个不变的。

感谢您的任何评论。

编辑:我找到了这个 问题, ,答案应该很好地参考此问题。但是,除了ac_src_over外,没有其他混合操作支持。为什么微软不改善其API?

有帮助吗?

解决方案

我很确定在Windows或OSX上的标准库中不支持每通道alpha。您可能需要独立使用3层(将每一层视为单独的32位位图),而不是撰写它们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top