windows 透明贴图两套体系

  • Post author:
  • Post category:其他




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