【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()的时候就不会出错了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值