none
三目光栅操作疑问 RRS feed

  • 问题

  •  

    Code Snippet
    void TransparentBlt2( HDC hdc0, // 目标DC
    int nX0,int nY0,// 目标偏移
    int nW0,int nH0,// 目标宽高度
    HDC hdc1, // 源DC
    int nX1,int nY1,// 源起点
    int nW1,int nH1,// 源宽高度
    UINT Tcol // 透明色,COLORREF类型
    ) //透明显示[4章]
    {//A、建立图形资源。
    HBITMAP hBMP =CreateCompatibleBitmap(hdc0,nW0, nH0); //创建位图内存
    HBITMAP mBMP =CreateBitmap(nW0,nH0,1,1,NULL); //创建单色掩码位图
    HDC hDC =CreateCompatibleDC(hdc0); //创建设备句柄
    HDC mDC =CreateCompatibleDC(hdc0); //创建设备句柄
    HBITMAP oldBMP =(HBITMAP)SelectObject(hDC, hBMP);
    HBITMAP oldmBMP=(HBITMAP)SelectObject(mDC, mBMP);
    //B、拷贝或压缩拷贝源DC中的位图到临时hDC中。
    if (nW0==nW1&&nH0==nH1)
    BitBlt(hDC,0,0,nW0,nH0,hdc1,nX1,nY1,SRCCOPY);
    else
    StretchBlt(hDC,0,0,nW0,nH0,hdc1,nX1,nY1,nW1,nH1,SRCCOPY);
    //C、生成掩码位图。
    SetBkColor(hDC, Tcol);// 设置透明色
    BitBlt(mDC,0,0,nW0,nH0,hDC,0,0,SRCCOPY);// 生成白色透明区,其它区域为黑色的掩码位图
    SetBkColor(hDC, RGB(0,0,0)); // 生成黑色透明区,其它区域保持不变的位图
    SetTextColor(hDC, RGB(255,255,255)); // 白色
    BitBlt(hDC,0,0,nW0,nH0,mDC,0,0,SRCAND);
    SetBkColor(hdc0,RGB(255,255,255)); // 透明部分保持屏幕不变,其它部分变成黑色
    SetTextColor(hdc0,RGB(0,0,0)); // 黑色
    //D、透明显示
    BitBlt(hdc0,nX0,nY0,nW0,nH0,mDC,0,0,SRCAND); //"与"运算,在hdc0生成掩模
    BitBlt(hdc0,nX0,nY0,nW0,nH0,hDC,0,0,SRCPAINT); //"或"运算,生成最终透明效果
    //E、以下为释放资源
    SelectObject(hDC, oldBMP);
    DeleteDC(hDC);
    SelectObject(mDC, oldmBMP);
    DeleteDC(mDC);
    DeleteObject(hBMP);
    DeleteObject(mBMP);
    }

     

     

    问题:
    对于SetBkColor()
    SetTextColor()

    对bitblt()函数产生的作用不明白

    查了许多资料,有帮助的很少,但是知道这个叫三目光栅操作,具体规则谁能解释一下吗?

    不同的背景色 前景色 对位运算结果的影响?

    • 已移动 Sheng Jiang 蒋晟Moderator 2009年2月7日 21:32 Windows GDI API问题 (从 Visual C++ 移动到 Windows Vista 开发相关讨论)
    • 已移动 小鱼儿 2009年5月19日 9:39 ([Loc]From:Windows Vista 开发相关讨论)
    2008年12月2日 9:20

答案