2

我有一个带有 R、G、B 颜色通道的 24 位位图和一个带有 R、G、B alpha 通道的 24 位位图。我想将第一个位图与 GDI 中的 HDC 或 Direct2D 中的 RenderTarget 分别与 alpha 通道进行 alpha 混合。例如,假设对于一个像素,位图颜色为 (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 中。但我找不到在 Windows 中本地进行拆分和组合的方法(Direct2D 层有帮助吗?)。此外,拆分和合成可能需要许多额外的复制。性能开销会太高。

或者也许在 3 遍中进行 alpha 混合。每次通过对一个通道应用混合,同时保持其他 2 个不变。

感谢您的任何评论。

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

4

1 回答 1

1

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

于 2010-06-19T16:56:33.463 回答