我想问下怎么才能把一个要用的图片的背景给去掉,举个例子,一个人物图片,但是他是有背景色的,怎么才能让它融入你自己设置的界面背景中,只是去掉了背景,而人物图片还在.谢谢了,我是个新手,希望大家的支持!

解决方案 »

  1.   

    如果背景色就是一种颜就好处理,用TransparentBlt设置背景色为关键色就可以去掉,否则我看就只有用PS扣掉
      

  2.   

    方法1:使用API TransparentBlt。方法2:比API要快一点void TransparentBltImage(HDC hdcDest,int nXOriginDest,int nYOriginDest,int nWidthDest,int nHeightDest,HDC hdcSrc,int nXOriginSrc,int nYOriginSrc,int nWidthSrc,int nHeightSrc,UINT crTransparent)
    {
    HBITMAP hOldImageBMP,hImageBMP = CreateCompatibleBitmap(hdcDest,nWidthDest,nHeightDest);//创建兼容位图
    HBITMAP hOldMaskBMP,hMaskBMP = CreateBitmap(nWidthDest,nHeightDest,1,1,NULL);     //创建单色掩码位图
    HDC     hImageDC = CreateCompatibleDC(hdcDest);
    HDC     hMaskDC = CreateCompatibleDC(hdcDest);

    hOldImageBMP = (HBITMAP)SelectObject(hImageDC,hImageBMP);
    hOldMaskBMP = (HBITMAP)SelectObject(hMaskDC,hMaskBMP);

    //将源DC中的位图拷贝到临时DC中
    if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc)
            BitBlt(hImageDC,0,0,nWidthDest,nHeightDest,hdcSrc,nXOriginSrc,nYOriginSrc,SRCCOPY);
    else
            StretchBlt(hImageDC,0,0,nWidthDest,nHeightDest,hdcSrc,nXOriginSrc,nYOriginSrc,nWidthSrc,nHeightSrc,SRCCOPY);

    //设置透明色
    SetBkColor(hImageDC,crTransparent);

    //生成透明区域为白色,其它区域为黑色的掩码位图
    BitBlt(hMaskDC,0,0,nWidthDest,nHeightDest,hImageDC,0,0,SRCCOPY);

    //生成透明区域为黑色,其它区域保持不变的位图
    SetBkColor(hImageDC,RGB(0,0,0));
    SetTextColor(hImageDC,RGB(255,255,255));
    BitBlt(hImageDC,0,0,nWidthDest,nHeightDest,hMaskDC,0,0,SRCAND);

    //透明部分保持屏幕不变,其它部分变成黑色
    SetBkColor(hdcDest,RGB(255,255,255));
    SetTextColor(hdcDest,RGB(0,0,0));
    BitBlt(hdcDest,nXOriginDest,nYOriginDest,nWidthDest,nHeightDest,hMaskDC,0,0,SRCAND);

    //"或"运算,生成最终效果
    BitBlt(hdcDest,nXOriginDest,nYOriginDest,nWidthDest,nHeightDest,hImageDC,0,0,SRCPAINT);

    //清理、恢复    
    SelectObject(hImageDC,hOldImageBMP);
    DeleteDC(hImageDC);
    SelectObject(hMaskDC,hOldMaskBMP);
    DeleteDC(hMaskDC);
    DeleteObject(hImageBMP);
    DeleteObject(hMaskBMP);
    }