使用纹理画笔时,线条的粗细看起来不规则

本文关键字:看起来 不规则 纹理 画笔 | 更新日期: 2023-09-27 18:35:35

>我打算使用纹理画笔绘制相同粗细的线条。然而,线条的粗细看起来不规则。

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

如果您有想法,我将不胜感激。

显示的线条

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

使用纹理画笔时,线条的粗细看起来不规则

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

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

毕竟,这个图像将不再模糊。你付出的代价是 0.4 不完全是 0.378(实际上是 0.3779527559...),所以,一切都会显得大 5.5%,但没有人会注意到这一点。