【发布时间】:2011-01-09 11:36:57
【问题描述】:
我正在尝试使用 GDI+ DrawImage 在 CImage 对象上绘制一些位图。生成的 CImage 位图似乎预乘了 alpha,但我在 msdn 文档中找不到任何提及。
当我在 CImage HDC 上使用 DrawImage 进行绘制时会发生什么?
【问题讨论】:
标签: c++ winapi gdi+ gdi alphablending
我正在尝试使用 GDI+ DrawImage 在 CImage 对象上绘制一些位图。生成的 CImage 位图似乎预乘了 alpha,但我在 msdn 文档中找不到任何提及。
当我在 CImage HDC 上使用 DrawImage 进行绘制时会发生什么?
【问题讨论】:
标签: c++ winapi gdi+ gdi alphablending
是的,结果将被预乘,因为AlphaBlend 函数需要预乘的 alpha。这在 BLENDFUNCTION 结构的 AlphaFormat 成员的文档中有所说明:
AC_SRC_ALPHA - 当位图具有 Alpha 通道(即每像素 Alpha)时设置此标志。请注意,API 使用预乘 Alpha,这意味着位图中的红色、绿色和蓝色通道值必须与 Alpha 通道值进行预乘。例如,如果alpha通道值为x,则在调用之前,红色、绿色和蓝色通道必须乘以x并除以0xff。
参考:http://msdn.microsoft.com/en-us/library/dd183393(v=vs.85).aspx
【讨论】: