【问题标题】:draw multiple curves in WinForms picturebox在 WinForms 图片框中绘制多条曲线
【发布时间】:2011-03-20 00:37:46
【问题描述】:

我正在开发一个程序,我想在 WinForms 应用程序中绘制二极管曲线。我有一个二极管名称列表,我有它们的点,你可以在图片的右侧看到。即电压为 X,电流为 Y(一条曲线包含大约 50 个点)。

我想要做的是从列表中选择一个或多个二极管,它们的曲线会显示在我的绘图上。你现在看到的只是一个图片框,里面装满了bmp。我知道这不是一个可靠的解决方案,所以我问你做这种事情的最佳方法是什么?我不知道有什么好的组件可以让我做到这一点。所以我只需要知道什么是完成这项任务的最佳方法?

二极管曲线类似于:

我的程序中可能有多达 100 条二极管曲线,所有这些(单个或多个)都应通过单击列表中的它们来绘制。

那你怎么看?

更新

同样重要的是通过取消选择曲线中的一个引脚,它的曲线应该从图中删除!

我正在使用下面的代码绘制你看到的那个轴:

    Bitmap xyCords = new Bitmap(500, 500);
Graphics g = Graphics.FromImage(xyCords);
g.DrawLine(penAxis, 250, 0, 250, 500);
g.DrawLine(penAxis, 0, 250, 500, 250);
curveBox.Image = xyCords;

如果我制作了一个新的图形,以后怎么可能,我将其附加如下:

curveBox.Image += newGraphic;

** 如果有任何组件或东西已经可以做我想做的事,请告诉我。或者告诉我一个好方法!谢谢!

【问题讨论】:

    标签: c# winforms drawing draw


    【解决方案1】:

    尝试使用Graphics.DrawCurve。你只需将所有你想要的点放在一个数组中,然后将它和一支笔传递给方法。

    编辑: 在您的代码之后添加它,以向您自己证明这两个图共存。要擦除其中一个,只需绘制相同的点,但使用位图的背景颜色(测试一下,我不记得它是什么了)。

    Point[] ptarray = new Point[3];
    ptarray[0] = new Point(250, 250);
    ptarray[1] = new Point(300, 300);
    ptarray[2] = new Point(350, 400);
    
    Pen pengraph = new Pen(Color.Green, 0.75F);
    g.DrawCurve(pengraph, ptarray);
    
    Point[] ptarray2 = new Point[3];
    ptarray2[0] = new Point(100, 100);
    ptarray2[1] = new Point(200, 150);
    ptarray2[2] = new Point(250, 250);
    
    Pen pengraph2 = new Pen(Color.Yellow, 1.25F);
    g.DrawCurve(pengraph2, ptarray2);
    

    【讨论】:

    • @jonsca 嗨,我的问题是我应该在什么基础上这样做?我认为在图片框上它并不好,因为据我所知,它只能包含 1 张图像。我的意思是,如果你只添加一条曲线很简单,但是一旦你在图片框上已经有一条曲线作为 bmp,当你要向它添加第二条曲线时,你必须再次同时添加这两条.我说的对吗?
    • 不,因为您会将 bmp 合并为图形对象,您可以进行任何必要的绘画和绘图。就个人而言,如果这方面不是您的整个项目,我会研究已经完成绘图工作的预制控件(我不知道任何副手,但我相信有很多)。
    • @jonsca 好的,我想你的意思是我可以将任意数量的图形应用到图片框?我目前正在使用此代码仅将轴绘制到我的图片框:Bitmap xyCords = new Bitmap(500, 500); Graphics g = Graphics.FromImage(xyCords); g.DrawLine(penAxis, 250, 0, 250, 500); g.DrawLine(penAxis, 0, 250, 500, 250); curveBox.Image = xyCords; 但你看我以后不能做一个新图形并且像curveBox += newBMP 这样不会编译。可以给点代码示例吗?
    • 是的,让我自己测试一下,以确保我没有记错。如果您说的是这种情况,您可以保留所有点数组的锯齿状二维数组并每次重新绘制它们。
    • @jonsca,我尝试了你的方法并为这项任务开设了一个课程,它似乎有效:P 但我不确定这是否是最好的方法,但它有效!
    猜你喜欢
    • 2019-08-31
    • 1970-01-01
    • 2015-01-16
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多