delphi canvas 画线的宽度怎么设置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi canvas 画线的宽度怎么设置相关的知识,希望对你有一定的参考价值。
在canvas对象的子对象pen中进行设置,可设置颜色、宽度、线型等等。如:canvas.pen.width:=2; 参考技术A Canvas.Pen.Width 参考技术B Canvas.Pen.Width := 1; // 设置画笔宽度
电脑是怎么画线的??
【中文标题】电脑是怎么画线的??【英文标题】:How does computer draw a line?? 【发布时间】:2011-10-16 04:57:15 【问题描述】:Windows GDI 具有以下功能:
MoveTo();
LineTo();
它们接受开始绘制和停止绘制的坐标。
但是这些功能是如何实现的呢? (尤其是 LineTo)
他们需要计算A点和B点之间的所有点吗?
这条线到底是怎么画的??
【问题讨论】:
【参考方案1】:是的,他们计算 A 和 B 之间的每个单独的点。
最常见的有效方式是Bresenham's Line Algorithm。
请注意,Windows LineTo 不会绘制最后一个点。当线段一个接一个地绘制时,这样可以防止端点被重复绘制。
【讨论】:
【参考方案2】:没有看过 Windows 源代码的人可以深入回答这个问题... 但是 Windows 就像任何其他软件一样:它需要一些算法来画一条线......你可以在这里看到一个这样的算法http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm
Moveto 更“容易”,因为它只是更新系统知道的当前坐标...
【讨论】:
说不定,看过Windows源代码的人也是***用户.. :) 可能...但即使那样我也很确定会有保密协议禁止分享他在源代码中看到的任何内容:-)【参考方案3】:它不需要计算 A 和 B 之间的所有点(它们是无限的),而只需要计算 A 和 B 之间的离散像素。这通常是标准的线光栅化算法。请参阅Wikipedia 了解 Bresenham 的线光栅化算法,这是标准教科书示例,通常是更灵活的光栅化算法的基础。
【讨论】:
【参考方案4】:我怀疑除了(一种)Bresenham 之外还有更多事情要做,因为还有(可选的)抗锯齿功能。请参阅this article 了解可能实现的算法(吴小林的线算法)
【讨论】:
以上是关于delphi canvas 画线的宽度怎么设置的主要内容,如果未能解决你的问题,请参考以下文章