GDIPlus 混合函数使用 alpha 位图预乘 rgb channel 以提高效率。然而,预乘 alpha 的成本非常高,因为您必须一个一个地处理每个像素。
看起来它会是 SSE 组装的一个很好的候选者。这里有人想分享它的实现吗?我知道这是一项艰苦的工作,所以这就是我问的原因。我不是想偷你的工作。如果可以的话,你会得到我所有的考虑。
编辑:我不是想通过软件进行 alpha 混合。我正在尝试将图像中每个像素的每个颜色分量与其 alpha 预乘。我这样做是因为 alpha 混合是通过以下公式完成的:dst=srcsrc.alpha+dst(1-dst.alpha) 但是 AlphaBlend Win32 函数确实实现了 dst=src+dst( 1-dst.alpha) 出于优化原因。为了获得正确的结果,您需要在调用 AlphaBlend 之前让 src 等于 src*src.alpha。
因为我对汇编知之甚少,所以我会花一些时间来写,所以我问是否有人愿意分享它的实现。 SSE 会很棒,因为在论文中软件混合 alpha 的增益为 300%。
最佳答案
这里有一篇好文章。它有点旧,但您可能会在使用 MMX 实现 alpha 混合的部分中找到一些有用的东西。这可以很容易地转换为 SSE 指令,以利用更大的寄存器大小(128 位)
此处为英特尔应用说明,带有源代码
关于c++ - 有人有优化的函数来通过 alpha 预乘位图吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/759778/