如何绘制半透明位图
来源:互联网 发布:永恒之塔天族捏脸数据 编辑:程序博客网 时间:2024/05/17 06:12
使用时记得倒入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();
- 如何绘制半透明位图
- 绘制半透明位图以及如何画透明位图
- 绘制半透明位图
- 如何使用GDI绘制半透明矩形
- 如何绘制对话框窗口背景位图
- 半透明位图(转)
- 位图绘制
- 位图绘制
- 绘制位图
- 绘制半透明矩阵
- OpenGL绘制半透明物体
- vc++ 绘制半透明矩形
- QT绘制半透明窗体
- opencv 绘制半透明图形
- opencv 绘制半透明图形 (
- MFC 绘制半透明图片
- canvas 绘制半透明图片
- 如何将内存中的位图数据绘制在DC上
- 岁末随想
- 简单就是美——单一职责原则(转)
- 北京一日行之十八——智化寺
- 探索Laszlo的类、属性及事件(ZT)
- A simple IOCP Server/Client Class
- 如何绘制半透明位图
- CListCtrl, 重载DrawItem函数
- 学习ARM开发(12)
- 大唐美食故事记录(转)
- 上不了qq,解决办法
- 几段SQL Server语句和存储过程(藏)
- winsock编程问题
- tomcat 5.5.15发布了
- cvs 相关操作