- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在我的程序中绘制一个 GraphicsPath,但它似乎存在向路径添加随机尖峰的问题。路径越宽,情况似乎越糟。我做了一些可以重现这个问题的测试代码。
此代码需要一个包含 PictureBox 的表单(PictureBox 尺寸至少为 630 x 1050)和一个按钮。代码如下:
private void button1_Click(object sender, EventArgs e)
{
drawSomeLines();
pictureBox1.Refresh();
}
private void drawSomeLines()
{
//initialise the plot area:
Bitmap image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
pictureBox1.BackgroundImage = image;
Graphics g = Graphics.FromImage(image);
//create a graphics path:
GraphicsPath gPath = new GraphicsPath();
//add sections to the path:
gPath.AddLine(587.310059F, 29.2261658F, 229.974731F, 668.2402F);
gPath.AddArc(new RectangleF(203.177338F,560.3876F,421.357F,421.357F), -(90 - 299.21382700000413F), -1.532426F);
gPath.AddArc(new RectangleF(203.177368F,560.3876F,421.357F,421.357F), -(90 - 297.72672132554612F), -1.53240252F);
gPath.AddLine(224.740067F,678.2186F, 76.6899643F,979.773865F);
//draw the path 3 times, at different widths:
g.DrawPath(new Pen(new SolidBrush(Color.FromArgb(100, Color.Blue)), 80), gPath);
g.DrawPath(new Pen(new SolidBrush(Color.Blue), 40), gPath);
g.DrawPath(new Pen(new SolidBrush(Color.Red), 2), gPath);
}
我在此处以不同的宽度绘制了 3 次路径,这表明问题在宽度较大时如何变得更糟。
有谁知道为什么会发生这种情况,我该如何预防?任何想法将不胜感激。
干杯,
格雷格
最佳答案
你现在可能已经明白了这一点,但这就是你在你的行中得到“尖峰”的原因:
当您将第二个圆弧添加到图形路径对象时,其起点出现在您添加的第一个圆弧的终点“之前”。发生这种情况时,图形路径必须回溯以开始绘制第二个圆弧,最终会出现一些非常尖锐且形状奇特的角,尤其是在大线宽的情况下。
如果线条中有间隙,graphicspath 可以很好地填充它们,但如果有重叠,结果就不太好。
如果你改变这行代码:
gPath.AddArc(new RectangleF(203.177338F,560.3876F,421.357F,421.357F), -(90 - 299.21382700000413F), -1.532426F);
为此:
gPath.AddArc(new RectangleF(203.177338F,560.3876F,421.357F,421.357F), -(90 - 299.21382700000413F), -1.0F);
它消除了 2 个弧线段中的重叠,然后图形路径可以填充间隙并绘制平滑的线段,而没有产生“尖峰”的不良角效应。
从显示的角度来看,在你的行中有间隙比有任何重叠要好得多。
关于C# GraphicsPath 绘图问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4728874/
此应用程序中的简单曲线仅在将其拖出屏幕或调整窗口大小时才会出现。当应用程序刚启动时它不会出现,当窗口最大化或最小化时它也会消失。然而,所有这些时间,都会打印“Path Drawn”,因此所有绘画函数都
使用 .NET 的 System.Drawing.Graphics GDI 东西,我有一个由两个点数组组成的形状。它们是下图中的红色和绿色像素。 现在我试图用一种颜色填充这个形状的内部。将其绘制为简单
我正在制作一些实用程序类,它们可以将不同类型的符号放置到 CAD 图纸的立面上。我想确保如果我需要处理我这样做的 GraphicsPath 对象。 在下面 getCircle 函数内部的代码中,它表明
我正在尝试在我的程序中绘制一个 GraphicsPath,但它似乎存在向路径添加随机尖峰的问题。路径越宽,情况似乎越糟。我做了一些可以重现这个问题的测试代码。 此代码需要一个包含 PictureBox
我想创建一个 GraphicsPath 和一个点列表来形成位图非透明区域的轮廓。如果需要,我可以保证每张图片只有一个非透明像素的实体集合。因此,例如,我应该能够沿着像素的边缘顺时针或逆时针记录点并执行
我有以下内容 private bool IsPathVisible(Rectangle detectorRectangle, GraphicsPath path, Pen pen) { pat
如下图所示,PictureBox 中的文本与 TextBox 中的文本不同。如果我使用 Graphics.DrawString() 它工作正常,但是当我使用图形路径时,它会截断并且不显示整个文本。您认
是否可以更改 GraphicsPath 对象中某些点的坐标,同时将其他点留在原处? 传递到我的方法中的 GraphicsPath 对象将包含多边形和线条的混合体。我的方法看起来像: void Upda
恐怕我遇到了 Winforms/GDI+ 中的错误。我正在构建一个由直线和曲线组成的图形路径。在某些缩放级别(将变换矩阵应用于图形对象)路径绘制错误,请参见图片: 在做一些测试时,我注意到如果我将 F
我目前正在使用以下代码向图像添加文本: using (GraphicsPath graphicsPath = new GraphicsPath()) { graphicsPath.AddStr
我正在尝试找出将 .net 中的 GraphicsPath 变形为特定形状的最佳方法。我想要实现的结果是将文本扭曲成曲线向上、向下、向左、向右扇形,以及像波浪一样的东西。所有这些都可以在 Adob
我的文本类中有这个方法,但我似乎无法翻转整个文本。 我正在使用矩阵来转换用于绘制字符串的 GraphicsPath。 这是我使用@Jimi 的回答后的代码: public LayerClass
我创建一个 GraphicsPath 对象,添加一个椭圆,旋转 GraphicsPath 对象然后绘制它。现在我想获取 graphicsPath 最左边的点,这样我就可以检查它是否在特定边界内(用户可
我正在尝试制作一个可以从 GraphicsPath 中删除点的橡皮擦工具。到目前为止,我的代码允许用户在窗体上绘画,“删除”按钮应该删除 GraphicsPath 的前 20 个点。它一直有效,直到制
我需要为 GraphicsPath 对象创建一个扩展方法,以确定 GraphicsPath 是顺时针还是逆时针。 像这样: public static bool IsClockwise(Gra
我有一些看起来像这样的代码: GraphicsPath p = new GraphicsPath(); // Add some elements to p ... // ... g.FillPath(
出于某种原因,如果我使用 AddString 将字符串添加到 GraphicsPath,字体将比在字体对话框中看起来要小。 SizeF sz = g.MeasureString(Text, new
我需要将任意形状的 GraphicsPath“适合”到定义的空间(几乎总是矩形或圆形)。 我目前使用 Matrix 对象缩放 GraphicsPath 并且缩放工作正常,但问题是获取比例因子。 我能想
下面的代码画了一个十字: using (SolidBrush brush = new SolidBrush(Color.FromArgb(192, 99, 104, 113))) { usin
我正在尝试绘制类似具有 3 个参数的形状 半径 居中 cutOutLen 切掉的部分是圆圈的底部。 我发现我可以使用 var path = new GraphicsPath(); path.AddEl
我是一名优秀的程序员,十分优秀!