~~~这是我显示位图的程序,望高手在此基础上给出代码!
CDC dc;
CDC * pDC = GetDC();
if(!dc.CreateCompatibleDC(pDC))
{
return;
}
CBitmap b,*pOld;
BITMAP bm;
HBITMAP hbmp = (HBITMAP)LoadImage(NULL, _T(m_FileName), IMAGE_BITMAP,
0, 0, LR_CREATEDIBSECTION |LR_DEFAULTSIZE|LR_LOADFROMFILE);
b.Attach(hbmp);b.GetBitmap(&bm);
pOld = dc.SelectObject(&b);int width = int(bm.bmWidth/2);
int height = int(bm.bmHeight/2);
pDC->StretchBlt(x,y,width,height,&dc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
dc.SelectObject(pOld);
CDC dc;
CDC * pDC = GetDC();
if(!dc.CreateCompatibleDC(pDC))
{
return;
}
CBitmap b,*pOld;
BITMAP bm;
HBITMAP hbmp = (HBITMAP)LoadImage(NULL, _T(m_FileName), IMAGE_BITMAP,
0, 0, LR_CREATEDIBSECTION |LR_DEFAULTSIZE|LR_LOADFROMFILE);
b.Attach(hbmp);b.GetBitmap(&bm);
pOld = dc.SelectObject(&b);int width = int(bm.bmWidth/2);
int height = int(bm.bmHeight/2);
pDC->StretchBlt(x,y,width,height,&dc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
dc.SelectObject(pOld);
//参数:设备句柄,位图文件名,显示位置,要设为透明的颜色
void DrawTransBmp(HDC hdc,CString FileName,int x,int y,COLORREF clrTrans)
{
BITMAP bmp;
COLORREF clr;
HBITMAP bmpBack;
HBITMAP bmpBackOld,bmpMemOld;
HDC hdcMem,hdcBack;
POINT pt;
HBITMAP m_bmpTrans;
m_bmpTrans=(HBITMAP)LoadImage(NULL,FileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
hdcMem=CreateCompatibleDC(hdc);
bmpMemOld=(HBITMAP)SelectObject(hdcMem,m_bmpTrans); GetObject(m_bmpTrans,sizeof(BITMAP),(LPVOID)&bmp);
pt.x=bmp.bmWidth;
pt.y=bmp.bmHeight; hdcBack=CreateCompatibleDC(hdc); bmpBack=CreateBitmap(pt.x,pt.y,1,1,NULL);
bmpBackOld=(HBITMAP)SelectObject(hdcBack,bmpBack); clr=SetBkColor(hdcMem, clrTrans);
BitBlt(hdcBack, 0,0,pt.x, pt.y,hdcMem,0,0,SRCCOPY);
SetBkColor(hdcMem,clr); BitBlt(hdc,x,y,pt.x,pt.y,hdcBack,0,0,SRCAND);
BitBlt(hdc,x,y,pt.x,pt.y,hdcMem,0,0,SRCPAINT); DeleteObject(SelectObject(hdcBack,bmpBackOld));
SelectObject(hdcMem,bmpMemOld); DeleteDC(hdcBack);
DeleteDC(hdcMem);
}
//例如:DrawTransBmp( pDC->GetSafeHdc(),"bmpname.bmp",10,10,RGB(0,0,0) );
void TransparentBlt2( HDC hdcDest, // 目标DC
int nXOriginDest, // 目标X偏移
int nYOriginDest, // 目标Y偏移
int nWidthDest, // 目标宽度
int nHeightDest, // 目标高度
HDC hdcSrc, // 源DC
int nXOriginSrc, // 源X起点
int nYOriginSrc, // 源Y起点
int nWidthSrc, // 源宽度
int nHeightSrc, // 源高度
UINT crTransparent // 透明色,COLORREF类型
)
{
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);
}
这样字就可以显出来了,用
AlphaBlend(
HDC hdcDest,
int nXOriginDest,
int nYOriginDest,
int nWidthDest,
int hHeightDest,
HDC hdcSrc,
int nXOriginSrc,
int nYOriginSrc,
int nWidthSrc,
int nHeightSrc,
BLENDFUNCTION blendFunction
);
用法和BitBlt函数相似