CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

在实现alphablend 透明位图时,搞不清楚HDC的关系了

楼主yoogle(离谱)2005-08-03 09:48:49 在 VC/MFC / 基础类 提问

对于下面这个方法,应该如何得到hdcDest和hdcSrc.(概念不是很清除)  
  AlphaBlend(  
      HDC   hdcDest,  
      int   nXOriginDest,  
      int   nYOriginDest,  
      int   nWidthDest,  
      int   hHeightDest,  
      HDC   hdcSrc,  
      int   nXOriginSrc,  
      int   nYOriginSrc,  
      int   nWidthSrc,  
      int   nHeightSrc,  
      BLENDFUNCTION   blendFunction  
  );  
   
  顺便问一下,该方法里面的那些个int型的参数必须按照要求填么?我的意思是大小啊,坐标啊可不可以自己随便改改。 问题点数:50、回复次数:4Top

1 楼dirdirdir3(风)回复于 2005-08-03 09:59:20 得分 25

可以随便添,hdc可以从你的bmp的CDC中得到。  
  如bmp1,与bmp2叠加。  
  c1,c2是生成的CDC,  
  c1.SelectObject(&bmp1);  
  c2.SelectObject(&bmp2);  
  AlphaBlend(c1.m_hdc,0,0,n,m,c2.m_hdc,0,0,n,m,SRCCOPY)Top

2 楼honker110(honker)回复于 2005-08-03 09:59:35 得分 25

hdcDest是你要在其上画图的DC,比如屏幕hdcScreen   =   CreateDC("DISPLAY",   NULL,   NULL,   NULL);   、窗口hdc   =   ::GetDC(hWnd);  
  hdcSrc是来源DC,也可以是屏幕、窗口,也可以自己建,然后把位图选进去或自己画,  
  下面是MSDN抓屏幕的例子  
  //   Create   a   normal   DC   and   a   memory   DC   for   the   entire   screen.   The    
  //   normal   DC   provides   a   "snapshot"   of   the   screen   contents.   The    
  //   memory   DC   keeps   a   copy   of   this   "snapshot"   in   the   associated    
  //   bitmap.    
     
  hdcScreen   =   CreateDC("DISPLAY",   NULL,   NULL,   NULL);    
  hdcCompatible   =   CreateCompatibleDC(hdcScreen);    
     
  //   Create   a   compatible   bitmap   for   hdcScreen.    
     
  hbmScreen   =   CreateCompatibleBitmap(hdcScreen,    
                                            GetDeviceCaps(hdcScreen,   HORZRES),    
                                            GetDeviceCaps(hdcScreen,   VERTRES));    
     
  if   (hbmScreen   ==   0)    
          errhandler("hbmScreen",   hwnd);    
     
  //   Select   the   bitmaps   into   the   compatible   DC.    
     
  if   (!SelectObject(hdcCompatible,   hbmScreen))    
          errhandler("Compatible   Bitmap   Selection",   hwnd);    
     
                  //   Hide   the   application   window.    
     
                  ShowWindow(hwnd,   SW_HIDE);    
     
                    //Copy   color   data   for   the   entire   display   into   a    
                    //bitmap   that   is   selected   into   a   compatible   DC.    
     
                  if   (!BitBlt(hdcCompatible,    
                                0,0,    
                                bmp.bmWidth,   bmp.bmHeight,    
                                hdcScreen,    
                                0,0,    
                                SRCCOPY))    
     
                  errhandler("Screen   to   Compat   Blt   Failed",   hwnd);    
     
                  //   Redraw   the   application   window.    
     
                  ShowWindow(hwnd,   SW_SHOW);Top

3 楼honker110(honker)回复于 2005-08-03 10:01:23 得分 0

int参数当然是控制截取或画哪一部分/位置了Top

4 楼yoogle(离谱)回复于 2005-08-03 10:36:34 得分 0

看看我下面这样写行不行?  
  CDC*   m_pdcMemory;  
  HDC   hDC;  
  hDC   =   ::GetDC(this->GetSafeHwnd());  
   
                                      BLENDFUNCTION   bf;    
  CBitmap   btmp   ;  
  btmp.LoadBitmap(IDB_BITMAP1);  
  m_pdcMemory->SelectObject(btmp);  
   
  bf.BlendOp   =   AC_SRC_OVER;  
  bf.BlendFlags   =   0;  
  bf.SourceConstantAlpha   =   0x7f;     //   half   of   0xff   =   50%   transparency  
  bf.AlphaFormat   =   0;                           //   ignore   source   alpha   channel  
   
  AlphaBlend(hDC,   100,   -100,    
                                          100,   100,    
                                          m_pdcMemory->m_hDC,   0,   0,   100,   100,   bf);  
       
  DeleteDC(hDC);  
  我的selectobject怎么老出错。Top

相关问题

  • GDI+可以实现像AlphaBlend那样的透明画图吗
  • 在FW中背景为透明色时字体为什么不清楚?
  • 偶做了个自绘菜单,用到了AlphaBlend,但是只有菜单第一项是半透明的,何故?
  • 有人知道alphablend算法,就是使两副图重叠起来有半透明效果的算法?
  • 除了使用AlphaBlend外,还有什么方法可以实现半透明效果的画图?
  • Excel中,选中的单元格会呈蓝色半透明状态,我用AlphaBlend作同样处理,却很慢。
  • DIB位图如何设置某种颜色为透明呀,我使用TransparentBlt函数后系统报错,不能将参数6:从"ATL::Image"转换为"HDC"
  • 透明窗体
  • 有关透明
  • 透明性

关键词

  • dc
  • 屏幕
  • null
  • hdc
  • hdcscreen
  • alphablend
  • hbmscreen
  • pdcmemory
  • blendfunction
  • btmp

得分解答快速导航

  • 帖主:yoogle
  • dirdirdir3
  • honker110

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo