编程语言
首页 > 编程语言> > c#-GDI线图绘制算法

c#-GDI线图绘制算法

作者:互联网

我不了解GDI在表面上画线的方式,可能是它有某种算法可以做到.

对于前.让我们采取10×10像素的表面.

  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);
     }

我们将得到:

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

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

  y = offset + width/2 - 1

其中y是实际起点y,选择偏移量是起点y.

但是在某些情况下,这不起作用.例如,让宽度为6,选定的顶部偏移为0,我们将得到y = 2,并以此方式绘制:

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

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

解决方法:

线条图中没有偏移.您在DrawLine方法中指定的坐标定义了线的中心.顶部像素为y-宽度/ 2,底部像素为y-宽度/ 2宽度-1.第二个公式考虑到宽度/ 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

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

标签:graphics,gdi-2,c
来源: https://codeday.me/bug/20191102/1988969.html