一副BMP图像,经过旋转以后,长宽必然增大,可是图像的内容不变,这样造成了很多冗余的区域,可是BMP文件一定是长方形的,现在我想将冗余的那部分区域变成背景的颜色,也就是说使这部分透明,就象PHOTOSHOP中的层一样,在上层对图像进行旋转或者形状变换后多余部分是用下层部分填充的.推而广之,我想显示一副指纹图像,现在我想对感兴趣的那部分椭圆区域显示,而其他部分均是透明的,请问怎么办?最好给出源码,小人不胜感谢

解决方案 »

  1.   

    hehe..., the codes below helps:设置并叠加透明图片的,就是说一张图片做底在客户区,然后另一涨在其上边,
    且在上边的那张图片挖几个洞,用来显示下边的图片。
    代码:
    void CTransparentPicView::DrawTransparent(CDC *pDC, int x, int y, COLORREF crColour)
    {
    COLORREF crOldBack=pDC->SetBkColor(RGB(255,255,255));
    COLORREF crOldText=pDC->SetTextColor(RGB(0,0,0));
    CDC dcImage, dcMask;
    CBitmap bmp;
    bmp.LoadBitmap(IDB_BITMAP2);
    BITMAP bm;bmp.GetBitmap(&bm);
    int nWidth=bm.bmWidth,nHeight=bm.bmHeight;
    dcImage.CreateCompatibleDC(pDC);
    dcMask.CreateCompatibleDC(pDC);
    CBitmap* pOldBitmapImage=dcImage.SelectObject(&bmp);
    CBitmap bitmapMask;
    bitmapMask.CreateBitmap(nWidth, nHeight, 1, 1, NULL); 
    CBitmap* pOldBitmapMask = dcMask.SelectObject(&bitmapMask);
    dcImage.SetBkColor(crColour);
    dcMask.BitBlt(0, 0, nWidth, nHeight, &dcImage, 0, 0, SRCCOPY);
    pDC->BitBlt(x, y, nWidth, nHeight, &dcImage, 0, 0, SRCINVERT);
    pDC->BitBlt(x, y, nWidth, nHeight, &dcMask, 0, 0, SRCAND);
    pDC->BitBlt(x, y, nWidth, nHeight, &dcImage, 0, 0, SRCINVERT); 
    dcImage.SelectObject(pOldBitmapImage);
    dcMask.SelectObject(pOldBitmapMask);
    pDC->SetBkColor(crOldBack);
    pDC->SetTextColor(crOldText);
    }
      

  2.   

    直接用BitBlt的最后一个参数用辆次SRCAND SRCPAINT就能楼空,或者用DirectDraw的颜色键
      

  3.   

    参考:http://www.vckbase.com/document/viewdoc/?id=1345
      

  4.   

    参考:http://www.vckbase.com/document/viewdoc/?id=541