(1)、使用cximage,我现在只关心png图片的贴图,所以只编译了其中的cximag.dll,png.lib和几个需要加入工程的头文件,
默认加入png图像之后直接用draw()函数绘制是不会透明的,我试过,一种解决方法:
在OnPaint()函数中:
imgSource=new CxImage();
imgSource->Load("222.png",CXIMAGE_FORMAT_PNG);
imgSource->Draw(this->GetDC()->m_hDC,0,0);
RGBQUAD rgb=imgSource->GetPixelColor(1,1);
imgSource->IncreaseBpp(24);
imgSource->SetTransIndex(24);
imgSource->SetTransColor(rgb);
imgSource->Draw(this->GetDC()->m_hDC,0,0);
也就是获得所需透明的像素值,然后透明化。
(2)使用msimg32.dll里面的transparentblt()
使用之前需要加入
#import comment (lib,"msimg32.lib”)
transparentblt()的最后一个值是设置透明值的,也就是说,你在作图之前需要把不想显示的地方的RGB值设置为此值
(3)使用默认的bitblt(),stretchblt()也行。这样的透明主要是函数的最后一个值,
我发的这个图我也不知道看的到不,就以此做个例子:
在OnPaint()中:
CDC *pdc=GetDC();
CBitmap m_bmp;
m_bmp.LoadBitmap(IDB_BITMAP1);
BITMAP bmp;
m_bmp.GetBitmap(bmp);
CDC memdc;
memdc.CreateCompatibleDC(pdc);
memdc.SelectObject(m_bmp);
pdc->StretchBlt(0,0,bmp.bmwidth,bmp.bmHeight,&memdc,0,bmp.bmwidth/2,bmp.bmwidth,bmp.bmheight,SRCAND); //SRCAND是与背景and
pdc->StretchBlt(0,0,bmp.bmwidth,bmp.bmHeight,&memdc,0,0,bmp.bmwidth/2,bmp.bmheight,SRCPAINT); //SRCPAINT是跟背景or吧