AlphaBlend函数如何用?

yy2001 2003-11-06 09:31:56
请教:AlphaBlend函数如何用?我看MSDN没看明白
...全文
132 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tccsdn 2003-11-07
  • 打赏
  • 举报
回复
UP
pp616 2003-11-07
  • 打赏
  • 举报
回复
sorry 不是255 是 250

代码中的255是AlphaBlend的参数之一。
pp616 2003-11-07
  • 打赏
  • 举报
回复
BOOL AlphaBlend(
HDC hdcDest, // 目标DC
int nXOriginDest, // 目标左上角横坐标
int nYOriginDest, // 目标左上角纵坐标
int nWidthDest, // 目标区域宽度
int nHeightDest, // 目标区域高度
HDC hdcSrc, // 资源DC
int nXOriginSrc, // 资源区域左上角横坐标
int nYOriginSrc, // 资源区域左上角纵坐标
int nWidthSrc, // 资源区域宽度
int nHeightSrc, // 资源区域高度
BLENDFUNCTION blendFunction // AlphaBlend选项
);

给你一小例子
在Form上放两个Image然后给他们加载图象。再放一个Panel用来显示混合后的图象。
在.h中加入
void __fastcall proc(TMessage &msg);
.cpp中加入

TWndMethod ms;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ms=panel->WindowProc;
panel->WindowProc =proc;
}

//子类化Panel
void __fastcall TForm1::proc(TMessage &msg)
{
if(msg.Msg==WM_PAINT)
{
HDC dc,mdc;
HBITMAP m_bmp;
PAINTSTRUCT ps;
HDC dcForCross,dcForLantern;
BLENDFUNCTION m_bf;
m_bf.BlendOp = AC_SRC_OVER;
m_bf.BlendFlags = 0;
m_bf.SourceConstantAlpha =255;
m_bf.AlphaFormat = 0;
dc=BeginPaint(panel->Handle,&ps);
mdc=CreateCompatibleDC(dc);
m_bmp=CreateCompatibleBitmap(dc,panel->Width,panel->Height);
SelectObject(mdc,m_bmp);
AlphaBlend(mdc,0,0,250,250,Image1->Canvas->Handle,0,0,250,250,m_bf);
m_bf.SourceConstantAlpha =100;
AlphaBlend(mdc,0,0,250,250,Image2->Canvas->Handle,0,0,250,250,m_bf);
BitBlt(dc,0,0,250,250,mdc,0,0,SRCCOPY);
DeleteObject(m_bmp);
DeleteDC(mdc);
EndPaint(panel->Handle,&ps);
return;
}
ms(msg);
}

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
panel->WindowProc=ms;
}

代码中的255是因为我的Image1 Image2 panel 宽和高都是255。
如果你不是的。请改成相应的xxx->Width or xxx->Height
yy2001 2003-11-07
  • 打赏
  • 举报
回复
pp616(游戏全删了) :
谢谢你的例子,可我怎么试了后panel上显示的是一片黑?
fatwave 2003-11-06
  • 打赏
  • 举报
回复
设置窗体为半透明,但只是一闪而过!!没有什么用?

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧