第五章 图形基础part1

图形设备接口(GDI:Graphics Device Interface)是Windows的子系统,它负责在视讯显示器和打印机上显示图形。GDI的主要目的之一是支持与设备无关的图形。

5.1GDI 的结构

GDI原理:

Windows 98和Microsoft Windows NT中的图形主要由GDI32.DLL动态链接库输出的函数来处理。图形输出设备分为两大类:位映像设备和向量设备。大多数PC的输出设备是位映像设备。

Windows内定使用图素坐标系统。大多数传统的图形语言使用「虚拟」坐标系,其水平和垂直轴的范围在0到32,767之间。Windows GDI允许您使用两种坐标系统之一。GDI通常是一个静态的显示系统,只有有限的动画支持。如果需要为游戏编写复杂的动画,就应该研究一下Microsoft DirectX。

GDI函数呼叫:

1.取得(或者建立)和释放(或者清除)设备内容的函数:BeginPaint,EndPaint,GetDC,RealseDC。
2.取得有关设备内容信息的函数:GetTextMetrics
3.绘图函数:TextOut
4.设定和取得设备内容参数的函数:SetTextColor(指定TextOut(或者其它文字输出函数)所绘制的文字色彩)和SetTextAlign。
5.使用GDI对象的函数:CreatePen、CreatePenIndirect或ExtCreatePen函数中指定这些特征来建立一个逻辑画笔。

GDI基本图形:直线和曲线,填入区域,位图,文字。

其它部分:

映像模式和变换:GDI映像模式允许您以英寸毫米或者任何您想使用的单位来绘图。
Metafile是以二进制形式储存的GDI命令集合。Metafile主要用于通过剪贴板传输向量图形。

绘图区域:绘图区域是形状任意的复杂区域。
路径:路径是GDI内部储存的直线和曲线的集合。
剪裁:绘图可以限制在显示区域的某一部分中,这就是所谓的剪裁。
调色盘:自订调色盘通常限于显示256色的显示器。
打印。

 

5.2设备内容

取得设备内容句柄:

在处理WM_PAINT消息时,使用BeginPaint和EndPaint。Windows程序还可以在处理非WM_PAINT消息时取得设备内容句柄GetDC和ReleaseDC。Windows程序还可以取得适用于整个窗口(而不仅限于窗口的显示区域)的设备内容句柄GetWindowDC。如果要使用GetWindowDC,必须拦截处理WM_NCPAINT消息。

Windows使用WM_NCPAINT消息在窗口的非显示区域上绘图。也就是窗体客户区以外的重绘消息。

取得设备内容句柄的另一个更通用的函数是CreateDC。hdc = CreateDC (pszDriver, pszDevice, pszOutput, pData);

CreateIC:只是需要取得关于某设备内容的一些信息而并不进行任何绘画。

使用位图时,取得一个「内存设备内容」hdcMem = CreateCompatibleDC (hdc);
metafile设备内容来建立metafile:hdcMeta = CreateMetaFile(pszFilename);

取得设备内容信息:
GetDeviceCaps:取得设备功能包括显示器的大小(单位为图素或者实际长度单位)和色彩显示能力。

DEVCAPS1程序:

Windows应用程序可以使用SM_CXSCREEN和SM_CYSCREEN参数从GetSystemMetrics得到图素尺寸。从DEVCAPS1程序中您会注意到,程序可以用HORZRES(水平分辨率)和VERTRES参数从GetDeviceCaps中得到同样的值。这里「分辨率」指的是图素大小而不是每度量单位的图素数。
HORZSIZE和VERTSIZE,文件中称为以毫米计的实际屏幕的宽度和高度。
ASPECTX、ASPECTY和ASPECTXY值是每一个图素的相对宽度、高度和对角线大小,四舍五入到整数。
LOGPIXELSX和LOGPIXELSY仍然与在「控制台」的「显示器」程序中选择的字体有关。

关于色彩:

iBitsPixel = GetDeviceCaps(hdc, BITSPIXEL); //传回每个图素的色彩位数
iPlanes = GetDeviceCaps(hdc, PLANES);//传回色彩平面的数目

显示卡能够表示的色彩数就是这两个的乘积。iColors = 1 << (iPlanes * iBitsPixel);

在大多数GDI函数呼叫中,使用COLORREF值(只是一个32位的无正负号长整数)来表示一种色彩。 COLORREF值按照红、 绿和蓝色的亮度指定了一种颜色,通常叫做「RGB色彩」。

#define RGB(r,g,b) ((COLORREF)(((BYTE)(r) | /
                  ((WORD)((BYTE)(g)) << 8)) | /  
                  (((DWORD)(BYTE)(b)) << 16)))
GetNearestColor:决定与某一色彩最接近的纯色。crPureColor = GetNearestColor (hdc, crColor);

设备内容属性:
Windows使用设备内容来保存控制GDI函数在显示器上如何操作的「属性」,所以在用TextOut函数显示文字时,程序写作者不必指定文字的色彩和字体,Windows从设备内容取得这个信息。

保存设备内容:
如果程序需要使用非内定的设备内容属性,则您必须在每次取得设备内容句柄时初始化设备内容。

wndclass.style中加入CS_OWNDC标签,则每个窗口都将拥有自己的设备内容,它一直存在,直到窗口被删除。CS_OWNDC风格只影响GetDC和BeginPaint获得的设备内容。

想改变某些设备内容属性,用改变后的属性进行绘图,然后恢复原来的设备内容。那么应该使用以下两个API

idSaved = SaveDC(hdc);
RestoreDC(hdc, -1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的横打

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值