当前位置:鱼C工作室 >Windows程序设计 > 查看文章

窗口绘画:直线 – Windows程序设计(SDK)016

窗口绘画:直线

 

让编程改变世界

Change the world by program


 

上一讲,我们学习了设置和获取一个像素点的颜色。事实上,也就是教大家如何画一个点。因为基本上所有的现代计算机的显示器,都是光栅设备,也就是说它们的最基本单位是一个像素点。所以,我们会画一个点,理论上我们就能画出《蒙娜丽莎的微笑》。

 

设置一个像素点的颜色我们使用SetPixel函数,获得一个像素点的颜色,我们使用GetPixel函数。使用这个两个函数,确实可以绘制几乎所有你需要的图形。但有一个问题你不得不考虑,那就是性能。

 

SetPixel函数每绘制一个点,还负责任的返回它实际绘制的RGB颜色。大家说,这有没有必要?有童鞋说有,有童鞋说没有。其实各有各的道理。说有的童鞋,那是因为他们知道SetPixel有时候并不能完全按照参数的要求去设置RGB颜色,所以他们需要SetPixel返回一个实际设置了的RGB值来校对。

 

那说没有必要每次画一个点都要返回RGB值的童鞋,也是有他们的道理滴,像我们之前的例子,我们压根儿就没想要去关注SetPixel的返回值,所以这时候完全就是在做无用功。

 

因此,微软提供了一个效率高一些的API函数:SetPixelV,这个加了V的和没加V的唯一区别,就是返回值。SetPixelV只返回一个布尔类型的变量,表示函数是否调用成功。

 

但话说回来,尽管SetPixelV函数的效率要比SetPixel高一些,但画一幅图要反复调用几千上万次的函数操作,执行起来也是非常慢的。GDI这个图形系统有很多其他的绘图API函数,它们是建立在设备驱动程序的层次上进行绘图操作的,它们可以画直线,曲线和其他复杂图形,因此,直接调用特定的API比反复使用SetPixelV一点一点的画效率要高出很多。

 

那这一节课我们就介绍直线的画法,严格来说,我们是介绍线段的画法,因为直线的概念是两边无限延生的(大家知道后边小甲鱼说的直线,事实上指的是线段的意思就OK啦~)。

 

【扩展阅读】各种获得设备环境句柄的方法(课文解读)

【API档案】MoveToEx

【API档案】LineTo

【API档案】POINT 结构

【API档案】GetCurrentPositionEx


为您推荐

报歉!评论已关闭.