【发布时间】:2017-06-14 01:37:42
【问题描述】:
我正在尝试在 Masm 中制作游戏(我的老师是这么说的),但我在使用 TransparentBlt() 函数时遇到了一些问题。 我为我的游戏制作了一个基础,并使用了 BitBlt,如下所示:
invoke SelectObject,memDC,hPerson ;// selecting the Handler of my bitmap
mov hFImage, eax ;// putting the result in hFImage(using in other locals)
invoke BitBlt,hDC,0,0,500,478,memDC,coordX,coordY,SRCCOPY ;// drawing
其中 coordX 和 coordY 表示主要字符的坐标,默认值 (500, 478) 是我的窗口大小。 它工作得非常好,但有一天我在搜索时发现了透明Blt,我对它展示的结果很着迷。然后我试着把它放在我的项目上,只是 VUSH!这是怎么回事?我的角色就这样消失了……
invoke SelectObject,memDC,hPerson ;// same
mov hFImage, eax ;// same
RGB_b 0,160,192 ;// it puts the RGB of background on ebx
invoke TransparentBlt,hDC,0,0,500,478,memDC,coordX,coordY, 59, 30, ebx
如果您想知道,59 和 30 是我的位图的宽度和高度。
有人能告诉我如何使用 TransparentBlt(不仅仅是MSDN)吗?我对这个几乎是 PNG 的功能感到非常兴奋......
【问题讨论】:
-
如果您正在寻找类似“PNG”的支持 - 即 alpha 通道支持 - 为什么不使用也是 GDI 一部分的
AlphaBlendAPI。它比TransparentBlt(本质上)必须在内部制作掩码位图产生更好的效果。 -
@ChrisBecke,我在MSDN 搜索了这个
AlphaBlend,我意识到它对于我想要的来说太复杂了。我知道它可能比TransparentBlt(efficiency, blablabla) 更好,但我只需要一些容易看到、理解和解释的东西。 -
我认为它一点也不复杂。最大的问题只是工具之一:您需要给它一个 4 通道位图,并且没有很多绘图工具支持使用 ARGB 编写 bmp。
标签: windows winapi bitmap transparency masm