图形处理问题送100分 我想问下怎么才能把一个要用的图片的背景给去掉,举个例子,一个人物图片,但是他是有背景色的,怎么才能让它融入你自己设置的界面背景中,只是去掉了背景,而人物图片还在.谢谢了,我是个新手,希望大家的支持! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果背景色就是一种颜就好处理,用TransparentBlt设置背景色为关键色就可以去掉,否则我看就只有用PS扣掉 方法1:使用API TransparentBlt。方法2:比API要快一点void TransparentBltImage(HDC hdcDest,int nXOriginDest,int nYOriginDest,int nWidthDest,int nHeightDest,HDC hdcSrc,int nXOriginSrc,int nYOriginSrc,int nWidthSrc,int nHeightSrc,UINT crTransparent){ HBITMAP hOldImageBMP,hImageBMP = CreateCompatibleBitmap(hdcDest,nWidthDest,nHeightDest);//创建兼容位图 HBITMAP hOldMaskBMP,hMaskBMP = CreateBitmap(nWidthDest,nHeightDest,1,1,NULL); //创建单色掩码位图 HDC hImageDC = CreateCompatibleDC(hdcDest); HDC hMaskDC = CreateCompatibleDC(hdcDest); hOldImageBMP = (HBITMAP)SelectObject(hImageDC,hImageBMP); hOldMaskBMP = (HBITMAP)SelectObject(hMaskDC,hMaskBMP); //将源DC中的位图拷贝到临时DC中 if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc) BitBlt(hImageDC,0,0,nWidthDest,nHeightDest,hdcSrc,nXOriginSrc,nYOriginSrc,SRCCOPY); else StretchBlt(hImageDC,0,0,nWidthDest,nHeightDest,hdcSrc,nXOriginSrc,nYOriginSrc,nWidthSrc,nHeightSrc,SRCCOPY); //设置透明色 SetBkColor(hImageDC,crTransparent); //生成透明区域为白色,其它区域为黑色的掩码位图 BitBlt(hMaskDC,0,0,nWidthDest,nHeightDest,hImageDC,0,0,SRCCOPY); //生成透明区域为黑色,其它区域保持不变的位图 SetBkColor(hImageDC,RGB(0,0,0)); SetTextColor(hImageDC,RGB(255,255,255)); BitBlt(hImageDC,0,0,nWidthDest,nHeightDest,hMaskDC,0,0,SRCAND); //透明部分保持屏幕不变,其它部分变成黑色 SetBkColor(hdcDest,RGB(255,255,255)); SetTextColor(hdcDest,RGB(0,0,0)); BitBlt(hdcDest,nXOriginDest,nYOriginDest,nWidthDest,nHeightDest,hMaskDC,0,0,SRCAND); //"或"运算,生成最终效果 BitBlt(hdcDest,nXOriginDest,nYOriginDest,nWidthDest,nHeightDest,hImageDC,0,0,SRCPAINT); //清理、恢复 SelectObject(hImageDC,hOldImageBMP); DeleteDC(hImageDC); SelectObject(hMaskDC,hOldMaskBMP); DeleteDC(hMaskDC); DeleteObject(hImageBMP); DeleteObject(hMaskBMP);} 关于Thread32First的问题 关于读写磁盘的问题 如何把一个字符串时间,转换成时间类型 SYSTEMTIME or CTime ? 怎样生成一个 edit 控件数组,又怎么来响应 控件的各种事件 为什么会出错 高分请救!为何listview无法显示! 急:怎么用GetPrivateProfileSection() WM_MOUSELEAVE消息怎么用? ★★请大家帮忙啦!★ VC与数据库的问题!!★ 八百里加急!!!答对者愿以身想许!!!! 如何实现这种效果 Debug正常,Release后报错,This application has requested
{
HBITMAP hOldImageBMP,hImageBMP = CreateCompatibleBitmap(hdcDest,nWidthDest,nHeightDest);//创建兼容位图
HBITMAP hOldMaskBMP,hMaskBMP = CreateBitmap(nWidthDest,nHeightDest,1,1,NULL); //创建单色掩码位图
HDC hImageDC = CreateCompatibleDC(hdcDest);
HDC hMaskDC = CreateCompatibleDC(hdcDest);
hOldImageBMP = (HBITMAP)SelectObject(hImageDC,hImageBMP);
hOldMaskBMP = (HBITMAP)SelectObject(hMaskDC,hMaskBMP);
//将源DC中的位图拷贝到临时DC中
if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc)
BitBlt(hImageDC,0,0,nWidthDest,nHeightDest,hdcSrc,nXOriginSrc,nYOriginSrc,SRCCOPY);
else
StretchBlt(hImageDC,0,0,nWidthDest,nHeightDest,hdcSrc,nXOriginSrc,nYOriginSrc,nWidthSrc,nHeightSrc,SRCCOPY);
//设置透明色
SetBkColor(hImageDC,crTransparent);
//生成透明区域为白色,其它区域为黑色的掩码位图
BitBlt(hMaskDC,0,0,nWidthDest,nHeightDest,hImageDC,0,0,SRCCOPY);
//生成透明区域为黑色,其它区域保持不变的位图
SetBkColor(hImageDC,RGB(0,0,0));
SetTextColor(hImageDC,RGB(255,255,255));
BitBlt(hImageDC,0,0,nWidthDest,nHeightDest,hMaskDC,0,0,SRCAND);
//透明部分保持屏幕不变,其它部分变成黑色
SetBkColor(hdcDest,RGB(255,255,255));
SetTextColor(hdcDest,RGB(0,0,0));
BitBlt(hdcDest,nXOriginDest,nYOriginDest,nWidthDest,nHeightDest,hMaskDC,0,0,SRCAND);
//"或"运算,生成最终效果
BitBlt(hdcDest,nXOriginDest,nYOriginDest,nWidthDest,nHeightDest,hImageDC,0,0,SRCPAINT);
//清理、恢复
SelectObject(hImageDC,hOldImageBMP);
DeleteDC(hImageDC);
SelectObject(hMaskDC,hOldMaskBMP);
DeleteDC(hMaskDC);
DeleteObject(hImageBMP);
DeleteObject(hMaskBMP);
}