图形API1

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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函数可以用来画弧形

相关文档
最新文档