使用时记得倒入Msimg32.lib 静态库啊,否则会报错的
void CAADlg::OnButton1()
{
CDC DialogDC;
CDC *pDC;
pDC = GetDC();
CBitmap b;
b.LoadBitmap(IDB_BITMAP1);
DialogDC.createCompatibleDC(pDC);
DialogDC.selectObject(b);
CPen p;
p.createPen(PS_SOLID,12,0x004422);
DialogDC.FillSolidRect(0,0,145,143,0xf30332);
DialogDC.TextOut(40,40,"fsdfsd");
DialogDC.selectObject(p);
DialogDC.MoveTo(0,0);
DialogDC.LineTo(60,60);
BLENDFUNCTION bbf;
bbf.AlphaFormat = 0;
bbf.BlendFlags = 0;
bbf.BlendOp = AC_SRC_OVER;
bbf.SourceConstantAlpha = 111;
AlphaBlend( pDC->GetSafeHdc(),0,0,100,100,DialogDC.GetSafeHdc(),0,0,100,190,bbf );
}
方法2:
#define GetR(pixel) (((pixel) & 0x00ff0000) >> 16)
#define GetG(pixel) (((pixel) & 0x0000ff00) >> 8)
#define GetB(pixel) ((pixel) & 0x000000ff)
CPaintDC dc(this);
BITMAP bmpX,bmpY;
CBitmap bmp1,bmp2;
bmp2.LoadBitmap(IDB_BITMAP2);
bmp1.LoadBitmap(IDB_BITMAP1);
bmp1.GetBitmap(&bmpX);
UINT* bmpBuffer=(UINT*)GlobalAlloc(GPTR,bmpX.bmWidthBytes*bmpX.bmHeight);
bmp1.GetBitmapBits(bmpX.bmWidthBytes*bmpX.bmHeight,bmpBuffer);
CDC memdc;
memdc.createCompatibleDC(&dc);
memdc.selectObject(bmp1);
dc.BitBlt(10,10,bmpX.bmWidthBytes,bmpX.bmHeight ,&memdc,0,0,SRCCOPY);
bmp2.GetBitmap(&bmpY);
UINT* bmpBuffer2=(UINT*)GlobalAlloc(GPTR,bmpY.bmWidthBytes*bmpY.bmHeight);
bmp2.GetBitmapBits(bmpY.bmWidthBytes*bmpY.bmHeight,bmpBuffer2);
memdc.selectObject(bmp2);
dc.BitBlt(200,10,bmpX.bmWidthBytes,bmpX.bmHeight ,&memdc,0,0,SRCCOPY);
int nSize = bmpY.bmWidth*bmpY.bmHeight;
double blend = 0.5;
for (int i=0; i<nSize; i++)
{
int abR = (int) (GetR(bmpBuffer[i]) * blend + (1-blend) * GetR(bmpBuffer2[i]));
int abG = (int) (GetG(bmpBuffer[i]) * blend + (1-blend) * GetG(bmpBuffer2[i]));
int abB = (int) (GetB(bmpBuffer[i]) * blend + (1-blend) * GetB(bmpBuffer2[i]));
bmpBuffer2[i] = RGB(abB, abG, abR);
}
bmp2.SetBitmapBits(bmpX.bmWidthBytes*bmpX.bmHeight, bmpBuffer2);
memdc.selectObject(bmp2);
dc.BitBlt(390,10,bmpX.bmWidthBytes,bmpX.bmHeight ,&memdc,0,0,SRCCOPY);
GlobalFree((HGLOBAL)bmpBuffer);
GlobalFree((HGLOBAL)bmpBuffer2);
memdc.deleteDC();
void CAADlg::OnButton1()
{
CDC DialogDC;
CDC *pDC;
pDC = GetDC();
CBitmap b;
b.LoadBitmap(IDB_BITMAP1);
DialogDC.createCompatibleDC(pDC);
DialogDC.selectObject(b);
CPen p;
p.createPen(PS_SOLID,12,0x004422);
DialogDC.FillSolidRect(0,0,145,143,0xf30332);
DialogDC.TextOut(40,40,"fsdfsd");
DialogDC.selectObject(p);
DialogDC.MoveTo(0,0);
DialogDC.LineTo(60,60);
BLENDFUNCTION bbf;
bbf.AlphaFormat = 0;
bbf.BlendFlags = 0;
bbf.BlendOp = AC_SRC_OVER;
bbf.SourceConstantAlpha = 111;
AlphaBlend( pDC->GetSafeHdc(),0,0,100,100,DialogDC.GetSafeHdc(),0,0,100,190,bbf );
}
方法2:
#define GetR(pixel) (((pixel) & 0x00ff0000) >> 16)
#define GetG(pixel) (((pixel) & 0x0000ff00) >> 8)
#define GetB(pixel) ((pixel) & 0x000000ff)
CPaintDC dc(this);
BITMAP bmpX,bmpY;
CBitmap bmp1,bmp2;
bmp2.LoadBitmap(IDB_BITMAP2);
bmp1.LoadBitmap(IDB_BITMAP1);
bmp1.GetBitmap(&bmpX);
UINT* bmpBuffer=(UINT*)GlobalAlloc(GPTR,bmpX.bmWidthBytes*bmpX.bmHeight);
bmp1.GetBitmapBits(bmpX.bmWidthBytes*bmpX.bmHeight,bmpBuffer);
CDC memdc;
memdc.createCompatibleDC(&dc);
memdc.selectObject(bmp1);
dc.BitBlt(10,10,bmpX.bmWidthBytes,bmpX.bmHeight ,&memdc,0,0,SRCCOPY);
bmp2.GetBitmap(&bmpY);
UINT* bmpBuffer2=(UINT*)GlobalAlloc(GPTR,bmpY.bmWidthBytes*bmpY.bmHeight);
bmp2.GetBitmapBits(bmpY.bmWidthBytes*bmpY.bmHeight,bmpBuffer2);
memdc.selectObject(bmp2);
dc.BitBlt(200,10,bmpX.bmWidthBytes,bmpX.bmHeight ,&memdc,0,0,SRCCOPY);
int nSize = bmpY.bmWidth*bmpY.bmHeight;
double blend = 0.5;
for (int i=0; i<nSize; i++)
{
int abR = (int) (GetR(bmpBuffer[i]) * blend + (1-blend) * GetR(bmpBuffer2[i]));
int abG = (int) (GetG(bmpBuffer[i]) * blend + (1-blend) * GetG(bmpBuffer2[i]));
int abB = (int) (GetB(bmpBuffer[i]) * blend + (1-blend) * GetB(bmpBuffer2[i]));
bmpBuffer2[i] = RGB(abB, abG, abR);
}
bmp2.SetBitmapBits(bmpX.bmWidthBytes*bmpX.bmHeight, bmpBuffer2);
memdc.selectObject(bmp2);
dc.BitBlt(390,10,bmpX.bmWidthBytes,bmpX.bmHeight ,&memdc,0,0,SRCCOPY);
GlobalFree((HGLOBAL)bmpBuffer);
GlobalFree((HGLOBAL)bmpBuffer2);
memdc.deleteDC();