中间足球图片    创建足球位图 hImageBMP  选入hImageDC
创建单色掩码位图 hMaskBMP   选入hMaskDC(这时候单色位图什么都没有)1.
SetBkColor(hImageDC, RGB(0,0,0xff)); // 设置背景色为蓝色
BitBlt(hMaskDC, 0, 0, nWidthDest, nHeightDest, hImageDC, 0, 0, SRCCOPY); // 拷贝到hMaskDC
说经过以上操作后掩码位图变成如下图片,为什么?这里背景色的作用是什么(发生了什么位操作)?2.
SetBkColor(hImageDC, RGB(0,0,0));
SetTextColor(hImageDC, RGB(255,255,255));
BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);
说这些操作让hImageDC中足球的背景变成黑色,感觉这些操作和 ~S&D相同效果,背景色 前景色是怎么起作用的?求指导!

解决方案 »

  1.   

    如果第二张图是PNG,用GDI+,直接就可以了,
      

  2.   

    单色位图绘制到非单色图像也是一样,指定为背景色的颜色一律转换为白色,其他转为黑色。
    ---这个不大对以下操作可以让足球背景变黑
    SetBkColor(hImageDC, RGB(0,0,0));
    SetTextColor(hImageDC, RGB(255,255,255));
    BitBlt(hImageDC, 0, 0, nWidthDest, nHeightDest, hMaskDC, 0, 0, SRCAND);
    这里前景色设置成白色,足球颜色不变化
    如果前景色设置成了其它颜色(比如红色),足球颜色发生了变化,说明其它颜色不是转成黑色(背景还是黑)
    所以不是简单的黑色 白色的问题
      

  3.   

    SetBkColor(hImageDC, RGB(0,0,0));
    SetTextColor(hImageDC, RGB(255,255,255));
    看清楚设置的DC,是在彩色图像上设置背景色为黑色0,前景色为白色0x00FFFFFF,单色图像绘制到这个DC,转换为彩色图像,就将背景色转成黑色,前景色转成白色,然后进行与操作。你指定前景色为红色,则单色图像的前景色黑色转成红色0x00FF0000,与足球颜色相与,足球的红色通道值不变,绿,蓝色通道值变成0,结果足球就变红了。
      

  4.   

    这个我好像也没看到专门的文档或者资料说明,是多方面知识综合起来的,当初看到那篇文章就基本明白了,再看看MSDN,SetBkColor的说明,虽然说的很简略:
    If the background mode is OPAQUE, the background color is used to fill gaps between styled lines, gaps between hatched lines in brushes, and character cells. The background color is also used when converting bitmaps from color to monochrome and vice versa. 
    再编码试一下就理解了。