码迷,mamicode.com
首页 > 其他好文 > 详细

[ATL/WTL]_[CBitmap复制图片-截取图片-平铺图片]

时间:2014-08-31 18:43:31      阅读:301      评论:0      收藏:0      [点我收藏+]

标签:cbitmap   atlwtl   hbitmap   复制   wtl   


场景:

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复制图片-截取图片-平铺图片]

标签:cbitmap   atlwtl   hbitmap   复制   wtl   

原文地址:http://blog.csdn.net/infoworld/article/details/38961639

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!