看windows程序第五章GDI编程部分。一直卡壳在这里了。

下面我来说下自己的想法。看是否对您有帮助。

首先我们来看一个图。

SetPolyFillMode(ALTERNATE);  // 系统默认就是这种填充模式

如图所示:数字代表绘制图形点的先后次序。

现在。我们先从外面假设来一条射线,(当然了。我看到很多文章。说的都是屏幕水平方向的扫描线。)

对于这种模式。射线穿过奇条边框线时,则填充该边框线区域,穿过偶数条边框线时,则不填充。

大家对照上图的射线。很简单的就理解了“ALTERNATE”填充模式。

下面重点是“WINDING”填充模式:

继续看图:

对于射线穿过奇数边框线时,填充模式同ALTERNATE, 唯一不同的就是在穿过偶数条边框线时。要作另外的判断。

怎么判断偶数边的时候呢?

首先我们假想一下:在图中。垂直画一条线。向上为正。向下为负。对于WINDING填充模式。判断是否填充区域就是按照:遇到“封闭区域”偶数条边框线的时候。我们就要

看所有边框线的方向计数了。如果边框线向上。则计数加1.如果向下。则计数减1.只有计数不等于0 的时候,才填充偶数边框线封闭区域。

最后在附张图作最后说明:

对于A来说。射线穿过的第一条边框线为奇数。所以按照“ALTERNATE”来填充。

穿过第二条边框线的时候。为偶数。就要开始算边框线的方向计数了。我们可以看到第一条边框线向上。我们+1。第二条也向上。在+1;不等于0。则填充了。

穿过第三条边框线。又是奇数。所以继续按照"ALTERNATE"来填充。

好了。重点来了。第四条边框线出现了。也就是没有填充的D区域。我们来算下它的所有边框线的方向计数是多少。

+1、+1、-1、-1;看到没。前两条边框线都向上。后两条都向下。最后计数等于0.就不填充该区域了。

有了上面的解释。我们在来看《windows 程序设计》第五版 中的图,是不是很好懂了。

windows 程序设计 SetPolyFillMode关于ALTERNATE、WINDING的详细解释的更多相关文章

  1. windows系统中的dll的作用详细解释

    什么是.DLL文件? DLL 是一个包含可由多个程序同时使用的代码和数据的库.例如,在 Windows 操作系统中,Comdlg32 DLL 执行与对话框有关的常见函数.因此,每个程序都可以使用该 D ...

  2. Windows程序设计画图实现哆啦A梦

    在看雪论坛上看到的一个帖子,很喜欢,转载一下.原文地址:http://bbs.pediy.com/showthread.php?t=138630哆啦A梦是画出来的,不知道作者算这些坐标位置算了多久,真 ...

  3. Windows程序设计--(五)绘图基础

    5.1 GDI的结构 图形设备接口(GDI:Graphics Device Interface)是Windows的子系统,它负责在视讯显示器和打印机上显示图形. 5.2 设备环境 5.2.1 获取设备 ...

  4. Windows程序设计学习笔记(一)Windows内存管理初步

    学习Windows程序设计也有一些时间了,为了记录自己的学习成果,以便以后查看,我希望自己能够坚持写下一系列的学习心得,对自己学习的内容进行总结,同时与大家交流.因为刚学习所以可能有的地方写不不正确, ...

  5. Windows 程序设计

    一.Win32 API /******************************************************************** created: 2014/04/1 ...

  6. 关于《Windows程序设计(第五版)》中一个实例程序的疑问

    最近一直在看Charlse Petzold的<Windows程序设计>,作为一个新得不能再新的新手,只能先照着书的抄抄源码了,之前的例子一直都很正常,但昨天遇到一个很诡异的BUG. 先看实 ...

  7. windows 程序设计自学:添加图标资源

    #include <windows.h> #include "resource.h" LRESULT CALLBACK MyWndProc( HWND hwnd, // ...

  8. windows程序设计笔记

    2014.05.06 新建一个visual C++ -- 常规 -- 空白 的项目,用.c后缀名指定这是一个用C语言来写的windows项目.和C语言的hellworld程序做了一个比较,按照wind ...

  9. 《Windows程序设计第5版》学习进度备忘

    书签:另外跳过的内容有待跟进 __________________学习资源: <Windows程序设计第5版珍藏版> __________________知识基础支持: _________ ...

随机推荐

  1. 一个Windows Service项目的完整开发过程

    (一)建立项目文件 先建立一个解决方案文件,然后添加三个项目. 分别是: (1)Windows服务项目  -----ActiveMQSenderService项目,服务主要是定时轮询某表,将更新发送到 ...

  2. [Angular 2] How To Debug An Angular 2 Application - Debugging via Augury or the Console

    In this lesson we will learn several ways to debug an Angular 2 application, including by using Augu ...

  3. 第2章 数字之魅——斐波那契(Fibonacci)数列

    斐波那契(Fibonacci)数列 问题描述 递归算法: package chapter2shuzizhimei.fibonacci; /** * Fibonacci数列递归求解 * @author ...

  4. FTP服务器简易有效的访问方法

    访问FTP服务器传统的方法是使用专用的客户端程序,如CuteFTP,8UFTP等,也包括命令行的FTP客户端c:\windows\system32\ftp.exe程序. FTP服务器也有简易访问方法 ...

  5. Line Search and Quasi-Newton Methods

    Gradient Descent 机器学习中很多模型的参数估计都要用到优化算法,梯度下降是其中最简单也用得最多的优化算法之一.梯度下降(Gradient Descent)[3]也被称之为最快梯度(St ...

  6. boost库在工作(36)网络服务端之六

    在上面介绍了管理所有连接的类,这个类主要就是添加新的连接,或者删除不需要的连接.但是管理的类CAllConnect是没有办法知道什么时候添加,什么时候删除的,它需要从接收到连接类里获取得到新的连接,从 ...

  7. <label>标签for属性的妙用

    在用户注册的时候,常常用户点击文字就需要将光标聚焦到对应的表单上面,这个是怎么实现的呢?就是下面我要介绍的<label>标签的for属性 定义:for 属性规定 label 与哪个表单元素 ...

  8. 最小K个数之和

    描述 输入n个整数,输出其中最小的K个数之和.例如输入4,5,1,1,6,2,7,3,3这9个数字,当k=4,则输出最小的4个数之和为7(1,1,2,3). 输入 测试样例组数不超过10 每个测试案例 ...

  9. ArcGIS Server 10.2 实战(五)spatial etl tool 格式转换服务

    上不同的地图服务平台对地图文件格式的要求多种多样,arcgis使用的文件很难应用于其他平台上,因此需要有格式转换的服务来克服这种使用不同平台带来的麻烦,下面以TIFF格式转GEOTIFF格式为例. 首 ...

  10. 阅读《RobHess的SIFT源码分析:综述》笔记2

    今天开始磕代码部分. part1: 1. sift特征提取. img1_Feat = cvCloneImage(img1);//复制图1,深拷贝,用来画特征点 img2_Feat = cvCloneI ...