是否使用 gdi+ 在 hdc 上绘图?结果是预乘 alpha 位图?

发布于 2024-08-19 08:44:11 字数 143 浏览 5 评论 0原文

我正在尝试使用 GDI+ DrawImage 在 CImage 对象上绘制一些位图。生成的 CImage 位图似乎预乘了 alpha,但我在 msdn 文档中找不到任何提及。

当我在 CImage HDC 上使用 DrawImage 进行绘制时会发生什么?

I'm trying to draw some bitmap on a CImage object using GDI+ DrawImage. The resulting CImage bitmap seems to be premultiplied by alpha but I can't find any mention of that in the msdn documentation.

What happens when I draw using DrawImage over an CImage HDC ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

音栖息无 2024-08-26 08:44:11

是的,结果将被预乘,因为 AlphaBlend 函数需要预乘 alpha。 < 的文档 AlphaFormat 成员对此进行了说明代码>BLENDFUNCTION结构:

AC_SRC_ALPHA - 当位图具有 Alpha 通道(即每像素 Alpha)时,会设置此标志。请注意,API 使用预乘 Alpha,这意味着位图中的红色、绿色和蓝色通道值必须与 Alpha 通道值预乘。例如,如果 Alpha 通道值为 x,则在调用之前,红色、绿色和蓝色通道必须乘以 x 并除以 0xff。

参考: http://msdn.microsoft.com /en-us/library/dd183393(v=vs.85).aspx

Yes, the result will be pre-multiplied because the AlphaBlend function expects pre-multiplied alphas. This is noted in the documentation AlphaFormat member of the BLENDFUNCTION structure:

AC_SRC_ALPHA - This flag is set when the bitmap has an Alpha channel (that is, per-pixel alpha). Note that the APIs use premultiplied alpha, which means that the red, green and blue channel values in the bitmap must be premultiplied with the alpha channel value. For example, if the alpha channel value is x, the red, green and blue channels must be multiplied by x and divided by 0xff prior to the call.

Ref: http://msdn.microsoft.com/en-us/library/dd183393(v=vs.85).aspx

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文