C# GDI+绘制折线时 中间偶尔有断开的现象

huhuateng 2019-09-11 08:48:02
C# GDI+绘制折线时 中间偶尔有断开的现象,移动一下曲线位置或者使用抗锯齿断开部分就没有了。请问大神这是什么原因,怎么解决(不使用抗锯齿)。QQ:475230314



...全文
204 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋的红果实 2019-09-18
  • 打赏
  • 举报
回复
还是贴代码吧,没办法猜想
huhuateng 2019-09-18
  • 打赏
  • 举报
回复
引用 1 楼 stherix 的回复:
是你自己自绘的吗
一般会出现在 斜率接近无限大或者0的时候可能会出现,根据算法的不同
如果用系统GDI+的画线功能应该不会出现这种情况

当然也有可能是你坐标设置错误


全部都是自己绘制的,使用的GDI+,坐标没有错误
  • 打赏
  • 举报
回复
不应该啊 https://docs.microsoft.com/zh-cn/dotnet/api/system.drawing.pointf.x 是float啊。
public float X { get; set; }
huhuateng 2019-09-18
  • 打赏
  • 举报
回复
问题解决了,把PointF值X/Y值强制转换成int型就好了,
//创建两个点
List<PointF> points = new List<PointF>();
points.Add(new PointF((int)120.3743F, (int)55.98837F));
points.Add(new PointF((int)120.5066F, (int)154.9147F));
points.Add(new PointF((int)120.7265F, (int)154.9147F));
points.Add(new PointF((int)120.7265F, (int)154.9147F));
points.Add(new PointF((int)121.0827F, (int)154.9147F));
points.Add(new PointF((int)121.0827F, (int)154.9147F));
points.Add(new PointF((int)121.439F, (int)154.9147F));
points.Add(new PointF((int)121.439F, (int)154.9147F));
points.Add(new PointF((int)121.7953F, (int)154.9147F));
huhuateng 2019-09-18
  • 打赏
  • 举报
回复
引用 3 楼 秋的红果实 的回复:
还是贴代码吧,没办法猜想



public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Paint(object sender, PaintEventArgs e)
{
// 创建GDI
Graphics g = e.Graphics;

//创建两个点
List<PointF> points = new List<PointF>();

points.Add(new PointF(120.0821F, 56.20123F));
points.Add(new PointF(120.3743F, 55.98837F));
points.Add(new PointF(120.5066F, 154.9147F));
points.Add(new PointF(120.7265F, 154.9147F));
points.Add(new PointF(120.7265F, 154.9147F));
points.Add(new PointF(121.0827F, 154.9147F));
points.Add(new PointF(121.0827F, 154.9147F));
points.Add(new PointF(121.439F, 154.9147F));
points.Add(new PointF(121.439F, 154.9147F));
points.Add(new PointF(121.7953F, 154.9147F));
points.Add(new PointF(121.7953F, 154.9147F));
points.Add(new PointF(122.1516F, 154.9147F));
points.Add(new PointF(122.1516F, 154.9147F));
points.Add(new PointF(122.5079F, 154.9147F));
points.Add(new PointF(122.5079F, 154.9147F));
points.Add(new PointF(122.8642F, 154.9147F));
points.Add(new PointF(122.8642F, 154.9147F));
points.Add(new PointF(123.2204F, 154.9147F));
points.Add(new PointF(123.2204F, 154.9147F));
points.Add(new PointF(123.5767F, 154.9147F));
points.Add(new PointF(123.5767F, 154.9147F));
points.Add(new PointF(123.933F, 154.9147F));
points.Add(new PointF(123.933F, 154.9147F));
points.Add(new PointF(124.2893F, 154.9147F));


//创建画笔
Pen p = new Pen(Brushes.Black);
g.DrawLines(p, points.ToArray());
}
}


绘制完后频繁的改变窗体大小,时不时就会出现断开的现象
huhuateng 2019-09-18
  • 打赏
  • 举报
回复
引用 5 楼 bloodish 的回复:
Point数据的问题,根据索引找出现断点时对应的Point的值是怎样的?可能会出现NAN之类的值.


转换后的坐标值导出来 另外的程序绘图并没有出现断开的现象
bloodish 2019-09-18
  • 打赏
  • 举报
回复
Point数据的问题,根据索引找出现断点时对应的Point的值是怎样的?可能会出现NAN之类的值.
huhuateng 2019-09-18
  • 打赏
  • 举报
回复
引用 3 楼 秋的红果实 的回复:
还是贴代码吧,没办法猜想


就是坐标转换然后绘制折线的代码:
Color color = Pen.Color;
List<PointF> points = new List<PointF>();
for (int i = 0; i < numberPoints; i++)
{
PointF p2 = trans.Transform(data[i]); // 转换坐标
points.Add(p2);
}

Pen.Color = color;
if (points.Count > 2)
{
g.DrawLines(Pen, points.ToArray());
}
stherix 2019-09-12
  • 打赏
  • 举报
回复
是你自己自绘的吗 一般会出现在 斜率接近无限大或者0的时候可能会出现,根据算法的不同 如果用系统GDI+的画线功能应该不会出现这种情况 当然也有可能是你坐标设置错误

110,525

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧