GDI+ 概念

    windows中,图形显示主要由动态库 GDI32.DLL中导出的函数处理。

    工作原理:  GDI32.DLL中的函数 调用显示器和打印机的设备驱动程序 来绘制图形,即GDI32.DLL间接利用驱动程序来完成工作。

    

    图形输出设备:

    图形输出设备分为两类:

    <1>光栅设备: raster device : 是将图像表示成以点的形式构成的矩阵, 即以点构图。

    <2>矢量设备: vector device. :使用线条来绘制图像, 矢量设备通常指绘图机


    windows默认使用以像素为单位的坐标系统。 但windows GDI允许使用任何一种坐标系统(可以使用其他依据物理测量得到的坐标系统),  所以你可以使用虚拟坐标系统来保证程序与硬件独立,也可以使用设备坐标系统来完全迎合硬件的需求。(暂时还不知道这段话的意思,以及如何改变Windows使用的坐标系统,以及何种情况下会使用到其他坐标系统

    以像素的形式进行程序设计时,意味着放弃了设备独立性,这不完全正确。 关键在于要以设备独立的方式来使用像素,这需要设备接口语言为程序提供一种机制来查询设备的硬件特性,以便程序作出合适的调整。


    总体来说GDI只是一个静态显示系统,对动画的支持很有限。如果需要为游戏编写复杂的动画,应当学习一下DirectX,它提供了必要的动画支持。


    GDI函数分类 :  GDI包含几百个函数,可以分为为以下几类:

    <1>获取(或建立)和释放(或销毁)设备环境函数

    <2>获取设备环境信息的函数

    <3>绘图函数

    <4>设置和获取设备环境属性的函数

    <5>使用GDI 对象的函数,(GDI对象指 画笔,花刷等)

    

    GDI的基本图形:  (在屏幕或打印机上显示的图形类型可以分为下面几类,被称为基本图形

    <1>线条和曲线

    <2>可被填充的封闭区域

    <3>位图, 是一个二维数组,每个元素都对应显示设备上的一个像素。 位图是光栅图形的基础。

    <4>文本,

    GDI其他部分:

    <1>映射模式(mapping mode ) 和转换(transform):  

                映射模式:默认情况下,是以像素为单位进行绘制的,但GDI允许以英寸,毫米等其他任何单位进行绘制。

                转换: Windows NT支持传统的3x3 矩阵表示的世界坐标转换(world transform), 这用于倾斜和旋转图形对象。

    <2>图元文件(metafile)  :  metafile是一个以二进制形式存储的GDI命令集合,主要用于通过剪贴板转换矢量图形绘制的表现形式。

    <3>区域(region): 是一个任意形状的封闭图形, 通常可以表示为有一系列简单区域进行布尔运算后得到的结果。可以利用区域进行轮廓绘制,填充或者剪裁。

    <4>路径(path), 是存储在GDI内部的直线和曲线的集合。 可以用于绘制,填充,和剪裁。 路径还可转换为区域。

    <5>剪裁(clipping) , 当绘图被限制在客户区的一个特定空间位置时,就发生了剪裁。 那个特定空间位置可以是矩形或非矩形,它通常被制定为一个区域或者一个路径。

    <6>调色板(palettes)

    <7>打印(printing)



设备环境

    如果希望在图形输出设备(如屏幕或者打印机) 上绘制图形, 必须首先获取设备环境(device context , DC)的句柄。 设备环境句柄是与设备相关联的, 当使用设备句柄传递给GDI函数绘图时,也就告诉了Windows在哪个设备上进行绘图。


    获取设备环境句柄的几种方式:

一 ,在处理WM_PAINT消息时,获得设备环境句柄,绘图,然后释放设备环境句柄:

HDC hdc = BeginPaint(hwnd,&ps);    //获取窗口客户区中pc结构体中rcPaint结构体指定的区域的设备环境句柄

EndPaint(hwnd,&ps);                //释放设备环境句柄

二, 在处理非WM_PAINT消息时:

HDC  hdc = GetDC(hwnd);            //获取整个窗口客户区的设备环境句柄

ReleaseDC(hwnd,hdc);               //释放设备环境句柄


BeginPaint()函数获取的是 传递的窗口句柄 hwnd 所对应的窗口的客户区的设备环境句柄, 并且 ps 结构中包含一个rcPaint的矩形结构体,这个矩形定义了一个包围窗口客户区无效范围的矩形, 使用从BeginPaint函数获取的设备环境句柄,就只能在这个矩形区域内绘图, 调用 BeginPaint函数将使这个区域有效。


GetDC() 函数获得的是 hwnd对应窗口的整个客户区 设备环境句柄。 GetDC() 和 ReleaseDC()函数并不使任何客户区的无效区域变为有效。


三, 获得整个窗口的设备环境句柄, 其包括窗口标题拦,菜单,滚动条 和 客户区的外框。

HDC hdc = GetWindowDC(hwnd);            //获取整个窗口的设备环境句柄

ReleaseDC(hwnd, hdc);                    //释放窗口的设备环境聚丙


四,更通用的获取设备环境句柄

HDC hdc = CreateDC(pszDriver, pszDevice, pszOutput, pData);        //获取设备环境句柄

DeleteDC(hdc);                                                     //释放设备环境句柄

五,处理位图时,有时可能会用到一个 “内存设备环境”:

HDC hdcMem = CreateCompatibleDC(hdc);        //获得内存设备环境句柄

DeleteDC(hdcMem);                            //释放设备环境句柄

    可以把一个位图选入内存设备环境,并且调用GDI函数绘制这个位图。

六,获得一个图元文件的设备环境句柄:

HDC hdcMeta = CreateMetaFile(pszFilename);        //获得图元文件的设备环境句柄

CloseMetaFile(hdcMeta);                            //释放图元文件的设备环境句柄


获取设备环境的信息

    设备环境通常指的是物理的显示设备。   调用 GetDeviceCaps()函数来获取:

int iValue = GetDeviceCaps(hdc, iIndex);

    iIndex参数,是定义在WINGDI.H头文件中的29个标识符之一。   例如, 当iIndex的值为 HORZRES 时,GetDeviceCaps()函数 以像素为单位返回设备的宽度;


设备的尺寸

    如果你想绘制一个变长为 1 英寸的正方形。 为了完成这个正方形,或者你(程序员)或者 Windows(操作系统)需要知道在视频显示器上的 1 英寸对应的像素数目。   GetDeviceCaps函数可以帮助获得有关输出设备的物理尺寸信息。


色彩

    对于只显示黑色和白色的显示器,要显示每个像素只需要 1 bit 的内存。

    真彩(full color)显示器每像素由 24 bit (8bit表示红色,8bit表示绿色,8bit表示蓝色)内存存储。 一个能显示256色的视频适配器每像素需要8位的内存来表示。


设备环境属性

    Windows在设备环境中存储着一些属性,这些属性控制GDI函数在显示器上的操作方式。 当一个程序获取一个设备环境句柄时,Windows会设置所有的属性的默认值


保存设备环境

    一般,掉哟概念GetDC 或者 BeginPaint 函数时, Windows返回一个设备环境,它的所有属性都被设定为默认值,当设备环境调用ReleaseDC 或者 EndPaint函数时,对属性所做的任何改变都会丢失。

    若要保存设备环境,可以在注册窗口类时, 使用 CS_OWNDC 样式, 这样设备环境属性在下一次改变前会一直有效。

你可能感兴趣的:(GDI+ 概念)