首页 > 代码库 > [ATL/WTL]_[CBitmap复制图片-截取图片-平铺图片]
[ATL/WTL]_[CBitmap复制图片-截取图片-平铺图片]
场景:
1.当你需要截取图片部分区域作为某个控件的背景。
2.需要平铺图片到一个大区域让他自动放大时。
3.或者需要合并图片时。
代码:
CDC sdc; CDC ddc; sdc.CreateCompatibleDC(NULL); ddc.CreateCompatibleDC(NULL); CBitmap destBmp; destBmp.CreateCompatibleBitmap(CClientDC(NULL),width,height); sdc.SelectBitmap(m_Bitmap); ddc.SelectBitmap(destBmp); ddc.BitBlt(0, 0, width, height, sdc, rect.left, rect.top, SRCCOPY );
注意: 这里有一点要注意的,就是destBmp在调用CreateCompatibleBitmap时,传递进去的第一个参数是CClientDC,不然生成的新的CBitmap会不是你想要的.
下边给出的是MFC api复制HBITMAP 对象,部分代码来自网上.
复制HBITMAP对象.
static HBITMAP CopyBitmap(HBITMAP hSourceHbitmap,long width,long height,int srcx,int srcy) { CDC sourceDC; CDC destDC; sourceDC.CreateCompatibleDC(NULL); destDC.CreateCompatibleDC(NULL); //The bitmap information. BITMAP bm = {0}; //Get the bitmap information. ::GetObject(hSourceHbitmap, sizeof(bm), &bm); // Create a bitmap to hold the result HBITMAP hbmResult = ::CreateCompatibleBitmap(CClientDC(NULL), width, height); HBITMAP hbmOldSource = (HBITMAP)::SelectObject( sourceDC.m_hDC, hSourceHbitmap); HBITMAP hbmOldDest = (HBITMAP)::SelectObject( destDC.m_hDC, hbmResult ); destDC.BitBlt(0,0,width, height, sourceDC, srcx, srcy, SRCCOPY ); // Restore DCs ::SelectObject( sourceDC.m_hDC, hbmOldSource ); ::SelectObject( destDC.m_hDC, hbmOldDest ); ::DeleteObject(sourceDC.m_hDC); ::DeleteObject(destDC.m_hDC); return hbmResult; }
[ATL/WTL]_[CBitmap复制图片-截取图片-平铺图片]
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。