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 版权协议,转载请附上原文出处链接和本声明。
