【CImage类】—CImage类对象的复制问题

CImage类的复制问题

 

CImage类包含了自己的设备环境句柄。其不能被选入另一个新的CDC中。CImage为该图像创建它自己的HDC。因为一个HBITMAP一次只能被选入一个HDC,因此,与CImage相关的HBITMAP不能被选入另一个HDC。如果你需要一个CDC,则从CImage返回该HDC并把它传给CDC::FromHandle。

 

因此,CImage复制需要自己编写函数。如下:

 

void CChildView::ImageCopy(CImage* pImgSrc, CImage* pImgDrt)
{
    int MaxColors = imgOriginal.GetMaxColorTableEntries();
    RGBQUAD* ColorTab;
    ColorTab = new RGBQUAD[MaxColors];

    CDC *pDCsrc,*pDCdrc;
    if (!pImgDrt->IsNull())
    {
        pImgDrt->Destroy();
    }
    pImgDrt->Create(pImgSrc->GetWidth(),pImgSrc->GetHeight(),pImgSrc->GetBPP(),0);

    if (pImgSrc->IsIndexed())
    {
        pImgSrc->GetColorTable(0,MaxColors,ColorTab);
        pImgDrt->SetColorTable(0,MaxColors,ColorTab);
    }

    pDCsrc=CDC::FromHandle(pImgSrc->GetDC());
    pDCdrc=CDC::FromHandle(pImgDrt->GetDC());
    pDCdrc->BitBlt(0,0,pImgSrc->GetWidth(),pImgSrc->GetHeight(),pDCsrc,0,0,SRCCOPY);
    pImgSrc->ReleaseDC();
    pImgDrt->ReleaseDC();
    delete ColorTab;

 

这样OnDraw()的时候就不会出错了。

你可能感兴趣的:(对象,CImage类,CImage类,复)