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

C# 使用TextureBrush时,线条的厚度看起来不规则,c#,gdi+,C#,Gdi+,我打算使用纹理笔刷绘制相同厚度的线条。 然而,线条的厚度看起来不规则 如果可以的话,我不想停止0.1mm单位的绘制。 因为用户的代码几乎完成了 如果你有什么想法,我将不胜感激 绘图模糊,因为e.Graphics.PageScale与1不同。在屏幕上绘图时,您必须只使用GraphicsUnit.Pixel,所有其他值必须转换为像素 由于惯例是所有显示器每英寸96个像素,根据定义1英寸==25.4毫米,我们有0.1毫米==0.1毫米*96(像素/英寸)*(1英寸/25.4毫米)==0.378像素(

我打算使用纹理笔刷绘制相同厚度的线条。 然而,线条的厚度看起来不规则

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

如果你有什么想法,我将不胜感激


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

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


毕竟,这张图像将不再模糊。您付出的代价是0.4并不完全是0.378(实际上是0.3779527559…),因此,所有内容都将显示大5.5%,但没有人会注意到这一点。

我建议使用
e.Graphics.DpiX/Y而不是假设96dpi。除此之外:是的,当使用像素以外的图形时,人们不能期望10像素总是适合像素网格。谢谢你,辩证法和TaW。我明白为什么我的代码会画出模糊的线条。我希望我的代码可以同时应用于屏幕和打印。我可能需要更正我的代码。我已经写了很多代码,尤其是用户代码。这可能是一项艰巨的工作。谢谢你的回答。我学到了很多。如果你对答案很满意,请考虑一下。我发现你从来没有这样做过:点击左上角答案票数下方的(不可见)复选标记,然后点击它!它变绿了,给作者和你都赢得了一点声誉。。
    //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;
    }