用基本的VC能实现吗???不用GDI+

解决方案 »

  1.   

    半透明就是两幅图片的r g b 相加取平均值。所以基本VC能够做到。
      

  2.   

    如果你知道如何获取位图数据,可以自己实现Alpha混合。
      

  3.   

    我这段代码有什么问题?为什么蓝色矩形框根本不显示呢 CDC dcBack,dcMask; 
    dcBack.CreateCompatibleDC(pDC); 
    CBitmap bmpMem;     bmpMem.CreateCompatibleBitmap(pDC,m_rcViewRect.Width(),m_rcViewRect.Height());
        CBitmap *pBmpOld = dcBack.SelectObject(&bmpMem); 
      dcMask.CreateCompatibleDC(pDC);
      dcMask.FillSolidRect(m_MaskRect,RGB(0,0,255));   BLENDFUNCTION   bf;   
      bf.BlendOp   =   AC_SRC_OVER;   
      bf.BlendFlags   =   0;   
      bf.SourceConstantAlpha   =   100;     
      bf.AlphaFormat   =   0;      ::AlphaBlend(pDC->m_hDC,m_MaskRect.left,m_MaskRect.top,m_MaskRect.Width(),m_MaskRect.Height(),dcMask.m_hDC,m_MaskRect.left,m_MaskRect.top,m_MaskRect.Width(),m_MaskRect.Height(),bf);   dcBack.SelectObject(pBmpOld); 
      bmpMem.DeleteObject(); 
      dcBack.DeleteDC(); 
      dcMask.DeleteDC();
      

  4.   

    这段代码呢真看不懂,dcBack创建了又没有用到,dcMask创建了,又没有选入内存位图,然后dcMask里面的坐标似乎也不应该这样。
      

  5.   


    1.我对::AlphaBlend的用法还不太了解,应该是这样吗? ::AlphaBlend(dcBack.m_hDC,m_MaskRect.left...)试过,但是也没有效果.
    2.我希望画一块透明的蓝色矩形区域,使用fillsolidrect不是在内存中画吗?难道也要做成bmp?
    3.说得是这个坐标吗?m_MaskRect.这个rect就是我在窗口画矩形区域的rect,为了作透明效果,就直接拿来用了,有点乱,但是坐标应该对的吧.
      

  6.   

    哦,我真胡涂,CreateCompatibleBitmap只是创建句柄吧,我当成拷屏函数了.底图已经在别处画了,而且有很多层,数据比较难获取.所以我想直接拷屏作为back,那如果要拷屏该怎么做?