绘制位图的步骤

部署运行你感兴趣的模型镜像
•GDI是图形设备接口(Graphics Device Interface)的英文首字母的简称。
•GDI是一个抽象的接口,是一个关于图形显示的函数库。通过这个接口可以实现对图形的颜色、线条的粗细等属性的控制。它是我们的程序与计算机硬件之间的一个桥梁。
•Windows图形编程就是针对Windows自带的图形设备接口函数库和设备环境(DC)进行操作。通过调用这些函数库中的函数来完成绘制工作。
设备环境DC(Device Context 又称为设备上下文,也称为设备描述表)。它是一个关于如何绘制图形的方法的集合,它既可以绘制各种图形,也可以确定在应用窗口中绘制图形的方式,就是绘图模式和映射模式。


一、获得目标DC句柄(有三种方式)

获取DC设备上下文:
1.通过GetDC函数来获得相应窗口的HDC
GetDC函数适合在窗口现有图形的基础上进行绘制。
代码段:
{
HDC hDC = ::GetDC(hWnd);
//其他的绘图操作代码
……
::ReleaseDC(hWnd,hDC);
}
GetDC中传入的参数hWnd是窗口的句柄,它返回和这个窗口相关的DC
2.通过BeginPaint函数来获得所在窗口的HDC
BeginPaint函数是将窗口上所有内容清除干净,然后在上面绘制。
代码段:
{
		PAINTSTRUCT ps;
		HDC hDC = ::BeginPaint(hWnd,&ps);
		//其他的绘图操作代码
		::EndPaint(hWnd,&ps);
}
<div><div> typedef struct tagPAINTSTRUCT {
</div><div>     HDC         hdc;// 显示器的设备环境句柄
</div><div>     BOOL        fErase;//是否擦除背景
</div><div>     RECT        rcPaint;//指定了需要绘图的窗口区域
</div><div>     BOOL        fRestore;
</div><div>     BOOL        fIncUpdate;
</div><div>     BYTE        rgbReserved[32];
</div><div> } PAINTSTRUCT;</div></div>
3.通过CreateCompatibleDC 创建兼容内存DC
通过调用CreateCompatibleDC函数来创建与目标DC兼容的内存DC。一般用于解决界面的闪烁问题。
代码片段:
		{
			HDC hMemDC = ::CreateCompatibleDC(hDest);		//其他的绘图操作代码
			…
			::BitBlt(hDest,x,y,w,h,hMemDC,0,0,SRCCOPY);
			…
			::DeleteDC(hMemDC);
		}
获取目标DC句柄:
(1)LoadBitmap图片的加载
HBITMAP WINAPI LoadBitmapW(HINSTANCE hInstance,LPCWSTR lpBitmapName);
函数的作用是从应用程序工程资源中读取位图数据。
第一个参数HINSTANCE,它是资源文件所在的模块的实例句柄
第二个参数BitmapName是位图在资源中的ID名称。
(2)LoadImage图片的加载
LoadImage这个函数可以加载位图、图标、光标多种图像数据。
1.从资源加载
	hbmpBack = (HBITMAP) ::LoadImage (hInst,MAKEINTRESOURCE (IDB_BACK),IMAGE_BITMAP, 0,  0, LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);
2.从文件路径加载
	hbmpBack = (HBITMAP) ::LoadImage (NULL,_T(".\\1.bmp"),IMAGE_BITMAP,0, 0,LR_LOADFROMFILE|LR_DEFAULTSIZE|LR_CREATEDIBSECTION);

二、创建与目标DC兼容的临时内存DC

见CreateCompatiableDC()函数。
HDC hMemDC = ::CreateCompatibleDC(hDC);

三、将位图句柄选入到临时内存DC中

HGDIOBJ WINAPI SelectObject(HDC hdc, HGDIOBJ h);
第一个参数是设备DC。
第二个参数是HGDIOBJ,其实是一个void* 。这个函数传入一个新的GDI对象到第一个参数的DC中,并返回该DC的老的相同类型的GDI对象。
四、使用BitBlt函数将临时内存DC中的位图拷贝到目标DC上来
1.
BitBlt绘制位图(非拉伸绘制)
BOOL  WINAPI  BitBlt (
HDC hdc,    //目标DC的句柄
  int x, int y, int cx, int cy, //目标区域
HDC hdcSrc, //源DC的句柄
int x1,int y1, //源区域的左上角
        DWORD rop  //操作标志,一般是 SRCCOPY,是拷贝的意思。
);
2.StretchBlt拉伸函数(绘制位图)
BOOL WINAPI  StretchBlt(
HDC hdcDest, //目标DC的句柄
int xDest, int yDest, int wDest, int hDest,   //目标DC的区域
HDC hdcSrc,    //源DC的句柄
int xSrc, int ySrc, int wSrc, __in int hSrc, //源DC的区域
DWORD rop      //操作标志,一般为SRCCOPY,意思为拷贝
);

五、将位图句柄选出临时内存DC

SelectObject函数。

六、销毁临时的内存DC

位图的销毁
位图的销毁是调用DeleteObject函数。
::DeleteObject(hbmpBack);

CBitmap Bmp;
Bmp.LoadBitmap(IDB_BITMAP1);
CDC memDC;
memDC.CreateCompatibleDC(pDC);
hOldBmp = memDC.SelectObject(&Bmp);
pDC->BitBlt(0,0,600,600,&memDC,0,0,SRCCOPY);
SelectObject(hOldBmp);
DeleteObject(memDC);












您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值