gpt4 book ai didi

c# - GDI+画线算法

转载 作者:行者123 更新时间:2023-11-30 15:42:10 26 4
gpt4 key购买 nike

我无法理解 GDI+ 在表面上画线的方式,可能是它有一些算法可以做到这一点。

例如。让我们取一个 10x10 像素的表面。

  Bitmap img = new Bitmap(10, 10);

现在让我们在这个表面上画一条线,宽度为 5px,顶部偏移量为 5px。

  using (var g = Graphics.FromImage(img))
{
g.Clear(Color.White);
var pen = new Pen(Color.Brown);
pen.Width = 5;
g.DrawLine(pen, 0F, 5F, 10F, 5F);
}

我们将得到:

enter image description here

绘图不是从像素 #5 开始的,而是从像素 #4 开始的。很明显,起点是单独计算的。但是如何呢?

我试图获得规律性,得到了这个:

  y = offset + width/2 - 1

其中y为实际起点y,offset为选定起点y。

但在某些情况下这是行不通的。例如,让 width=6,selected top offset = 0,我们将得到 y=2,它会这样绘制:

enter image description here

它必须显示 6 个像素但它没有。

所以必须有更通用的算法来选择起点,但我真的不知道它可以是什么。任何帮助表示赞赏。

最佳答案

画线时没有offset。您在 DrawLine 方法中指定的坐标定义了线的中心。顶部像素是 y - width/2,底部是 y - width/2 + width - 1。第二个公式考虑了 width/2 向下舍入的事实。此外,顶行是 y = 0,底行是 y = 9。所以,第一行:

top = 5 - (5 / 2) = 3
bottom = 5 - (5 / 2) + 5 - 1 = 7

第二行:

top = 2 - (6 / 2) = -1
bottom = 2 - (6 / 2) + 6 - 1 = 4

顶部边缘被裁剪到位图的边缘,因此线宽减小。

关于c# - GDI+画线算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7742961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com