.HBURSH 画刷对象 可以把它认为是一种沾满油漆的刷子,那么它的作用也就很显
而易见了,就是把设备环境的某个特定区域刷成特定的颜色。
.HPEN 画笔对象 是具有一定颜色跟风格的画笔,它主要是用来绘制图元(线,矩
形,椭圆等)
.HFONT 字体对象 可以认为它是具有各种风格的字符集,用来向设备环境上绘制文
本。
.HRGN 区域对象 是可以被修剪,填充的一个具有某种形状的区域,可以使矩形,
椭圆,多边形,或者你能想到的任何形状。
在一个特定时刻里一个设备环境里各种 GDI 对象只能存在一个实例,也就是说,在一
个时刻里,一个设备环境里面只能有一个位图,一枝画笔,一个画刷,一种字体,一种特
定区域形状。可以把它的工作用以下场景来描述:一个用于绘制图形的设备(设备环境),
它首先需要一张纸(位图对象)来绘制图形,一枝笔(画笔对象)来画,一个刷子
(画刷对
象
)来填充背景,一种字体(字体对象)来写字,以及一种风格(区域对象)来画图.
CreatePen() 用于创建画笔对象
CreateSolidBrush() 用于创建画刷对象
CreateBitmap() 用于创建位图对象
CreateFont 用于创建字体对象
DeleteObject() 销毁所创建的对象
SelectObject() 用于将指定的对象选入设备环境
切记
:
从技术角度上来看,Windows 为每个应用程序维护一个特定的内存区域,当这个应用程
序结束时
Windows 会自动释放该应用程序所占有的内存区域,我们似乎不用把创建的对象
删除掉
,但是当这个程序要运行很长时间,并且不断向系统申请内存的时候我们就该傻眼了,
因为我们的程序就会狂吃内存
,这是我们所不愿见看到的,所以,作为一个良好的编程习惯,一
定把自己所申请的内存给释放掉
.
关于像素:
我们的显示器是由一个个点组成的,其中的一个点就是一个像素.这是我们所能操作的最
小单元
,当然点越多越小时我们就感觉越清晰.在我工作的大部分时间里我的显示器的分辨
率都是
1028*768,这意味着我在我的显示器上有超过 750,000 个点。除了显示器的宽和高
你有一个颜色深度是你必须关心的,即一个像素的颜色是用几个比特来表示的,如果是一
个比特,很显然只能够表示两种颜色,也就是单色显示器。最常用的是
8,16,24 和 32
比特颜色深度。
8 位色又称为时索引色,它涉及到调色板的相关知识,这里我就不详细介绍
了,相关的介绍已经很多了。
对于 16,24,32 位色,它们都是通过 RGB 三原色来表示一个像素的颜色的----红,
绿,蓝。
每个像素的表示方式在 DirectX 里特别关心的,在 GDI 里,我们可以把一切都看成是
24 比特的,系统会为我们作相应的转换工作的。
在 GDI 里,每种颜色都是由 COLORREF 来表示的。COLORREF 在本质上就是一个整
数。共
24 比特,每种颜色用 8 比特来表示。
下面是 RGB 宏定义:
#define RGB(r,g,b)
((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)
(b))<<16)))
有关像素的操作
: