具有相同笔宽的画线,但线宽在结果上不同

时间:2014-10-28 03:37:52

标签: c# line draw

我用相同的笔画线,但结果的线宽不同。为什么呢?

Bitmap b = new Bitmap(400, 400);
Graphics g = Graphics.FromImage(b);
g.PageUnit = GraphicsUnit.Point;
g.Clear(Color.White);
Pen pen = new Pen(Color.Red, 1.2f);

for (int i = 20; i < 200; i = i + 20)
{
    g.DrawLine(pen, 10, i, 190, i);
}

g.Dispose();
b.Save("d:/temp/test.png", ImageFormat.Png);
b.Dispose()

结果如下:

enter image description here

1 个答案:

答案 0 :(得分:1)

MSDN for GraphicsUnit

这是因为您正在使用Points而非像素,并且线条宽度的变化是线条放置中的舍入误差和线条宽度相关的结果如何在最终产品中以像素为单位进行渲染。

如果您不关心打印图像,最好坚持使用像素。

编辑:如果您想继续使用点数,请将相对于笔宽的内容分开:

        Bitmap b = new Bitmap(400, 400);
        Graphics g = Graphics.FromImage(b);

        g.PageUnit = GraphicsUnit.Point;
        g.Clear(Color.White);
        Pen pen = new Pen(Color.Red, 1.2f);

        for (float i = 20f * pen.Width; i < 200f * pen.Width; i = i + 20f * pen.Width)
        {
            g.DrawLine(pen, 10f, i, 190f, i);
        }

        g.Dispose();
        b.Save("c:/temp/test.png", ImageFormat.Png);
        b.Dispose();