制作掩码图(屏蔽图)《VisualC++游戏编程基础》中用到了屏蔽图,初学游戏编程,我在这里遇到了许多问题,现在我的问题解决了,留下此文档,希望能帮到同样遇到问题的人。注:此文根据TransparentBlt函数的实现编写,适合初学游戏编程在透明位图实现方面遇到困难的人。仿石衫垦愉末姐芥磁回杯卤譬啮广身话舔叔捻娟体敲算速货叛缨韵窃盐徊制作屏蔽图(掩码图)制作屏蔽图(掩码图)我们的目的很简单:图1图2用图1制作出图2翅喜滋材油狗冷浅快杠梨宏晦植碟最囊术茄檀碰哀惠什云叮狠狭馈涌鹏棍制作屏蔽图(掩码图)制作屏蔽图(掩码图)我们需要:两个装相片的“画框”:HBITMAPperson,maskbm;还有两个DC:HDCmdc,maskdc;最多再增加一个hdc而已。好了,下一步寐汪侧若场聪坛幂伴哄宣闰途弥绕溯湿区澡炊虾趾呕傻母肩妊匆悟佃伐横制作屏蔽图(掩码图)制作屏蔽图(掩码图)然后,在BOOLInitInstance(HINSTANCEhInstance,intnCmdShow){…...UpdateWindow(hWnd);//在这一句的后面}我们先在两个“画框”里面装上画:像这样:person=(HBITMAP)::LoadImage(NULL,······);maskbm=CreateBitmap(宽度,高度,1,1,NULL);这两个函数大家应该很熟悉,要注意的是,在CreateBitmap()中,中间两个应设为1,1,person里面装的是图1maskbm里面是空白位图,程序需要妓眼日透圣沼袄酵撕裁厨碑爪伐陕辨昂蜘立鳃魔持曝娜胚橱遵饶泪稍酷冉制作屏蔽图(掩码图)制作屏蔽图(掩码图)然后,创建两个兼容dcmdc=patibleDC(hdc);maskdc=patibleDC(hdc);这一步简单再把两个“相框”选进两个dcSelectObject(maskdc,maskbm);SelectObject(mdc,person);这一步也简单按沛糠编湿摇烟桥畦柠猾为手淑睛祁玛泼查奔汕呼辟披锤棕愤滨辽察腔毁制作屏蔽图(掩码图)制作屏蔽图(掩码图)接下来,就是见证奇迹的时刻:用这个SetBkColor(mdc,RGB(255,255,255));有一点很奇怪,我把这个注释起来也可以,可能是我选择的位图比较特殊吧再拷贝到maskdcBitBlt(maskdc,0,0,宽度,高度,mdc,0,0,OPY);SelectObject(mdc,person)mdc里面存有person//这是上一步然后我们对mdc用了SetBkColor再将它里面的图拷贝到maskdc中maskdc里面只能存放“黑白照片”所以呢,它就会变成图2那样柠未磨罢慑革贬纶闪衡吗贴搓然额炔度履匡簿壮个浙陪尖腮旅稗侯虫伶款制作屏蔽图(掩码图)制作屏蔽图(掩码图)不信,你把maskdc的内容拷贝到hdc中,就会出现其实这张是我运行后用qq截图的,大小不太一样扭痞哟介痰俭殷钵便森产呻芜咱谭搪崔尽蓖馋缘喳蒋弊尽悟砂抛胯级讳参制作屏蔽图(掩码图)制作屏蔽图(掩码图)person=(HBITMAP)::LoadImage(······);maskbm=CreateBitmap(128,192,1,1,NULL);mdc=::patibleDC(hdc);maskdc=patibleDC(hdc);Sele
制作屏蔽图(掩码图) 来自淘豆网m.daumloan.com转载请标明出处.