gpt4 book ai didi

winapi - GDI中文本的透明度

转载 作者:行者123 更新时间:2023-12-04 05:05:34 24 4
gpt4 key购买 nike

我已经使用GDI +创建了位图。我正在使用GDI Drawtext在该位图上绘制文本。使用Drawtext我无法应用透明度。
任何帮助或代码将不胜感激。

最佳答案

如果您想在没有背景填充的情况下绘制文本, SetBkMode(hdc,TRANSPARENT) 将告诉GDI在绘制文本时保留背景。

实际使用alpha渲染文本的前景色...将更加复杂。实际上,GDI在其API中实际上并不完全支持alpha channel 。实际上,除了AlphaBlend之外,它所做的只是保留 channel 。将COLOREF的高位设置为alpha值实际上是无效的,因为高字节实际上用于标志,以指示COLOREF是否为调色板条目(而不是RGB值)。

因此,不幸的是,您唯一真正的前进方向是:

  • 创建一个32位DIBSection。 (CreateDIBSection)。这样就为您提供了一个HBITMAP,可以保证它能够保存alpha信息。如果通过其他位图创建功能之一创建位图,则它将位于设备的色深处,可能不是32bpp。
  • DrawText放到DIBSection上。
  • 创建DIBSection时,您获得了指向实际内存的指针。此时,您需要遍历内存并设置Alpha值。我认为DrawText本身不会对alpha channel 做任何事情。我想对位图的每个DWORD的RGB分量进行简单检查-如果它们是背景色,则在alpha字节中用50%(或其他)alpha值重写DWORD,如果它们是背景色,则用100%重写alpha字节中的alpha。 *
  • AlphaBlend位图到最终目的地。 AlphaBlend要求源中的alpha channel 被预乘。

  • *
    在执行DrawText之前,只需将DIBSection设置为50%的alpha值就足够了,并确保BKColor是黑色的就足够了。我不知道DrawText可能对alpha channel 有什么作用。需要进行一些实验。

    关于winapi - GDI中文本的透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1340166/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com