织梦CMS - 轻松建站从此开始!

罗索

绘制透明位图

落鹤生 发布于 2010-12-28 10:49 点击:次 
如果要绘制透明位图,可以利用AlphaBlend函数实现。
TAG:

=============================================================

标题:绘制透明位图

摘要:通过AlphaBlend函数实现

备注:Windows CE + VS2005

日期:2010.4.26

姓名:朱铭雷

=============================================================

如果要绘制透明位图,可以利用AlphaBlend函数实现。该函数的原型如下:

 

  1. BOOL AlphaBlend( 
  2.   HDC           hdcDest, 
  3.   int           nXOriginDest, 
  4.   int           nYOriginDest, 
  5.   int           nWidthDest, 
  6.   int           nHeightDest, 
  7.   HDC           hdcSrc, 
  8.   int           nXOriginSrc, 
  9.   int           nYOriginSrc, 
  10.   int           nWidthSrc, 
  11.   int           nHeightSrc, 
  12.   BLENDFUNCTION blendFunction 
  13. ); 

       前十个参数的含义一目了然,最关键的是最后一个函数blendFunction。

BLENDFUNCTION结构体的原型如下:

 

  1. typedef struct _BLENDFUNCTION { 
  2.   BYTE  BlendOp; 
  3.   BYTE  BlendFlags; 
  4.   BYTE  SourceConstantAlpha; 
  5.   BYTE  AlphaFormat; 
  6. }BLENDFUNCTION, *PBLENDFUNCTION, *LPBLENDFUNCTION; 

       BlendOp:设置为AC_SRC_OVER。

       BlendFlags:必须设置为0。

       SourceConstantAlpha:该成员是源位图绘制到目标DC上的透明度。设置为0,则完全透明;设置为255,则不透明绘制。可以通过调节该参数,来实现一个自己满意的效果。

       AlphaFormat:该参数如果设置为AC_SRC_ALPHA,源位图必须是32 bpp的。如果不是,则ALPHABLEND函数将调用失败。

       关于这个函数更详细的信息,可以查阅Windows CE帮助文档。

       下面是一段基于Win32的示例程序,添加在WM_PAINT消息响应函数中:

———————————————————————————————————————

 

  1. BLENDFUNCTION blend; 
  2. blend.AlphaFormat = 0; 
  3. blend.BlendFlags = 0; 
  4. blend.BlendOp = AC_SRC_OVER; 
  5. blend.SourceConstantAlpha = 100; 
  6.   
  7. PAINTSTRUCT ps; 
  8. HDC hdc = BeginPaint(hWnd,&ps); 
  9. HDC hdcBmp = CreateCompatibleDC(hdc); 
  10. HANDLE hBmpDis = LoadImage(hInst,MAKEINTRESOURCE(IDB_BITMAP),IMAGE_BITMAP,0,0,0); 
  11. HBITMAP hOldBmp = (HBITMAP)SelectObject(hdcBmp,hBmpDis); 
  12. if(!AlphaBlend(hdc,200,200,48,48,hdcBmp,0,0,48,48,blend)) 
  13. OutputDebugString(_T("AlphaBlend Faild\n")); 
  14. SelectObject(hdcBmp,hOldBmp); 
  15. DeleteDC(hdcBmp); 
  16. EndPaint(hWnd,&ps); 

———————————————————————————————————————

       效果如下:

     源位图                  绘制的透明位图:

                             

       据说AlphaBlend函数执行速度较慢,一般要谨慎使用。

     利用这个函数,应该就可以实现图像渐入渐出的效果,还没试过,不知道效果如何。

 

(朱铭雷)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201012/10678.html]
本文出处:CSDN博客 作者:朱铭雷
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容