windows游戏绘图技巧
透明贴图的两套体系
在GDI中,想要透明贴图,主要有两套解决方案:
- 透明遮罩法
- 透明色彩法
透明遮罩法
GDI透明遮罩法:利用BitBit函数中的Raster光栅值的运算,来将图片中不希望出现的部分处理掉,称这种方法为“去背”;
WINGDIAPI BOOL WINAPI BitBlt( _In_ HDC hdc, //目标设备环境句柄
_In_ int x, //目的DC的x坐标
_In_ int y, //目的DC的y坐标
_In_ int cx, //贴到目的DC的宽度
_In_ int cy, //贴到目的DC的高度
_In_opt_ HDC hdcSrc, //源设备环境句柄
_In_ int x1, //来源DC的x坐标
_In_ int y1, //来源DC的y坐标
_In_ DWORD rop); //贴图方式
透明遮罩法的思路:用代码实现图片的OR与AND运算,操作透明遮罩法相关的光栅操作码为一下两个:
- SRCAND:通过使用AND操作符来将源和目标矩形区域内的颜色合并
- SRCPAINT:通过使用布尔类型OR操作符将来源和目标矩形区域的颜色合并
VOID Game_Paint( HWND hwnd )
{
//先贴上背景图
SelectObject(g_mdc,g_hBackGround);
BitBlt(g_hdc,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,g_mdc,0,0,SRCCOPY); //采用BitBlt函数在g_hdc中先贴上背景图
//用透明遮罩法绘制出第一个人物
SelectObject(g_mdc,g_hCharacter1);
BitBlt(g_hdc,50,WINDOW_HEIGHT-579,320,640,g_mdc,320,0,SRCAND);//透明遮罩法第一步,即将屏蔽图与背景图做"AND"运算
BitBlt(g_hdc,50,WINDOW_HEIGHT-579,320,640,g_mdc,0,0,SRCPAINT);//透明遮罩法第二步,即将前景图与背景图做"OR"运算
//用透明遮罩法绘制出第二个人物
SelectObject(g_mdc,g_hCharacter2);
BitBlt(g_hdc,450,WINDOW_HEIGHT-584,400,584,g_mdc,400,0,SRCAND);//透明遮罩法第一步,即将屏蔽图与背景图做"AND"运算
BitBlt(g_hdc,450,WINDOW_HEIGHT-584,400,584,g_mdc,0,0,SRCPAINT);//透明遮罩法第二步,即将前景图与背景图做"OR"运算
}
透明色彩法
透明色彩法:利用贴图时可用设置某种颜色为透明色的函数,如TransparentBlt函数,AlphaBlend函数,达成直观的透明背景显示方法;
WINGDIAPI BOOL WINAPI TransparentBlt(
_In_ HDC hdcDest, //目标环境设备的句柄
_In_ int xoriginDest, //目标矩形左上角的X轴坐标
_In_ int yoriginDest, //目标矩形左上角的y轴坐标
_In_ int wDest,
版权声明:本文为qq_29498749原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。