图形API1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图形API v0.1
作者:陈省(hubdog) 参考文献:win32 graphic api
Email: hubdog@
主页:
注意:文档并没有对英文完全翻译,完全是我个人学习笔记的性质,但是例子都是从英文文档中摘抄出来的。文档还会慢慢更新的
none 通用DC,需要调用ReleaseDC释放,适用于不图像操作不密集的应用CS_CLASSDC 表示所有同Class的窗口共享同一个DC,不推荐使用
CS_OWNDC 表示每个窗口有自己的私有DC,不需要用ReleaseDC释放这个DC,适用于图像密集的操作
例子DCDemo演示了标识的区别
物理窗口和逻辑窗口的坐标转换公式如下:
xViewport = (xWindow - xWindowOrg) * (xViewportExt/xWindowExt) +
xViewportOrg.
yViewport = (yWindow - yWindowOrg) * (yViewportExt/yWindowExt) +
yViewportOrg.
映射模式:
DC的默认映射模式是MM_TEXT,它是1:1的转换,也就是说一个逻辑单位等于一个物理单位。SetMapMode可以用来适用逻辑单位,MM_ANISOTROPIC模式可以按不同比例伸缩水平和垂直的比例,导致扭曲的图像,MM_ISOTROPIC类似于
MM_ANISOTROPIC,但它的水平和垂直伸缩比例是一样的。其他的模式都有固定的伸缩因子。
例子MapDemo.dpr演示了如何移动原始坐标并应用一个伸缩因子来进行坐标变换,用户可以选择一个映射模式,并应用伸缩因子来进行变换。
ChangeDisplaySettings是用来改变显示模式的
ClientToScreen 用于将客户坐标转化为屏幕坐标
ScreenToClient则相反
CreateCompatibleDC(DC:HDC):HDC
这个函数创建一个同给定的DC相兼容的内存DC。主要用于将图像复制到屏幕或打印机,一个位图必须被选择进这个DC,然后才能进行绘图操作。释放这个DC要使用DeleteDC函数。
例子MemDCDemo.dpr演示了如何使用上面的函数来实现动画。这个例子有一个问题就是,如果屏幕内的窗口被移动了,会留下很多拖尾。
DptoLP函数
DPtoLP(
DC: HDC; {the handle of a device context}
var Points; {a pointer to an array of TPoint structures}
Count: Integer {the number of entries in the array}
): BOOL; {returns TRUE or FALSE}
主要用于将设备坐标转换为逻辑坐标。Points参数指向一系列的要转换的点,函数调用成功后会将这一系列的点转换并返回的。
EnumDisplaySettings 函数用于枚举显示模式
GetDC用于获取设备的DC,当DC不需要后,可以使用ReleaseDC来释放。
例子GetDCDemo演示了如何使用GetDC
GetDeviceCaps 获取特定的设备的显示能力
例子DevCap演示了GetDeviceCaps的用法
GetMapMode可以获得映射模式
GetSystemMetrics函数可以获得像素级别的维度等信息。
例子SysMetricsDemo演示了函数的用法
GetViewportExtEx获得逻辑窗口的尺寸
GetViewportOrgEx获得逻辑窗口的原点坐标
GetWindowDC
GetWindowDC不同于GetDC的方面在于,它返回的DC可以用于在非客户区内画图,如边框等,不用的时候要用ReleaseDC函数释放,注意这个函数只能获得普通的DC,对这个DC的属性的改变不会影响窗口的私有和类DC的属性。
例子WinDCDemo演示了如何画窗口标题栏
GetWindowExtEx 获得相应DC对应的窗口的尺寸。
GetWindowOrgEx获得相应DC对应的窗口的原点坐标
LptoDP将逻辑点转化为设备点的坐标。
MapWindowPoints
将一个窗口的点的坐标系转化为另一个窗口的坐标系。.
例子MapPointDemo演示了用法
ViewPort是视口的意思
OffsetViewportOrgEx函数
通过添加一个位移来修改当前逻辑窗口的坐标原点。
OffsetWindowOrgEx
修改物理窗口的原点
ReleaseDC释放DC,但它对Clss DC 和OwnDC没有作用
RestoreDC 和SaveDC是配对使用的。
ScaleViewportExtEx是用于缩放逻辑窗口的函数
ScaleWindowExtEx是用于缩放物理窗口
例子ScaleViewDemo演示了这个函数的用法。
ScrollDC可以用来滚动图像
例子ScrollDCDemo演示了这个函数的用法
Windows提供了两种风格的画笔,装饰画笔和几何画笔。
装饰画笔的单位是设备单位并且不能被缩放,Windows只支持一个像素宽的装饰画笔,画笔的样式有很多种,比如点划线等,使用装饰画笔画图比几何画笔要快的多。
几何画笔使用逻辑单位,并且可以伸缩。它们支持同装饰画笔同样的样式,同时它们还支持用户定制的样式,以及只对画刷有效的样式。此外,几何画笔还可以应用end cap样式到线段的端点,以及对两条线段的汇合点应用联合样式。示例见下图。在Win95上,几何画笔不支持用户自定义的画笔样式,不能使用绝大多数的装饰画笔样式,只能用于绘制路径。
几何画笔线段结束点样式
几何画笔交汇点样式
Arc函数可以用来画弧形