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