使用TextureBrush时,线条的厚度看起来不规则

时间:2016-02-19 23:54:44

标签: c# gdi+

我打算使用Texture Brush绘制相同厚度的线条。 然而线条'厚度看起来不规则。

如果可以的话,我不想停止0.1毫米的单位。 因为用户的代码差不多完成了。

如果你有想法,我会很感激。

The lines in display

    //Brush User's Code
    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        // I need to draw by 0.1mm unit like CAD.
        e.Graphics.PageUnit = GraphicsUnit.Millimeter;
        e.Graphics.PageScale = 0.1F;

        Point leftTop = new Point(2, 2);
        using(TextureBrush aBrush = myBrush()){
            aBrush.TranslateTransform(leftTop.X, leftTop.Y);
            e.Graphics.FillRectangle(aBrush, leftTop.X,leftTop.Y, 90, 1000);
        }
    }

    //BrushMaker Code
    private  TextureBrush myBrush()
    {

        Bitmap bitmapCanvas = new Bitmap(20, 10);
        Graphics g = Graphics.FromImage(bitmapCanvas);

        Pen myPen = new Pen(Brushes.Black, 2F);
        g.DrawLine(myPen, 2, 5, 18, 5);

        var brush = new TextureBrush(bitmapCanvas);

        myPen.Dispose();
        g.Dispose();
        bitmapCanvas.Dispose();

        return brush;
    }

1 个答案:

答案 0 :(得分:2)

绘图模糊,因为e.Graphics.PageScale与1不同。在屏幕上绘图时,您必须只使用GraphicsUnit.Pixel,并且必须将所有其他值转换为像素。

由于惯例是所有显示器每英寸96像素,根据定义1英寸== 25.4毫米,我们有0.1毫米== 0.1毫米* 96(px /英寸)*(1英寸/25.4毫米) == 0.378像素(大约)。让它以0.4像素为基本单位。通过将它们乘以0.4来转换代码中的所有数字。而不是Point(2, 2)它是Point(1, 1)90, 1000变为36, 400Bitmap(20, 10)现在是Bitmap(8, 4)2F2, 5, 18, 5成为1F1, 2, 7, 2

毕竟这个图像不再模糊了。你支付的价格是0.4不完全是0.378(实际上是0.3779527559 ......),因此,一切都会显示5.5%,但没有人会注意到。