实现图像指定颜色的透明这是我写nfml遇到的一个小问题,对于vc++不是特别熟的人来说算是个问题!自认为还凑合吧,不过感觉效率一般。
此类技术一般用于有背景的贴图,我们不能针对每种背景对图片进行处理,那么就需要对图片轮廓进行高对比度颜色处理,就是用某种跟图片的像素不相近的单色填充图片背景,然后用程序将这个单色去掉来实现透明。具体实现如下:
LRESULT CNfmlGuiDraw::NfmlDrawTransparentImage(HWND hWnd, HBITMAP hBitmap, INT xPos, INT yPos,COLORREF transColor)
{
HDC hdc = GetDC(hWnd);
BITMAP bmp;
int xCnt;
HDC hdcMem = CreateCompatibleDC(hdc);
HGDIOBJ hOldSel = SelectObject(hdcMem, hBitmap);
GetObject(hBitmap, sizeof(BITMAP), &bmp);
for(xCnt=xPos; xCnt<bmp.bmWidth; xCnt+=bmp.bmWidth)
{
TransparentImage(hdc,
xCnt,
yPos,
bmp.bmWidth + xCnt,
bmp.bmHeight + yPos,
hdcMem,
xPos,
yPos,
bmp.bmWidth + xPos,
bmp.bmHeight + yPos,
transColor );
}
SelectObject(hdcMem, hOldSel);
DeleteDC(hdcMem);
return 0;
}
GOOD LUCK!