使用鼠标输入绘制图表

本文关键字:绘制 输入 鼠标 | 更新日期: 2023-09-27 18:31:19

我正在构建一个图表程序,最多显示12个不同的图形。所有图形应同时可见

应该可以通过鼠标输入来更改活动图形。

我像这样构建图表:

using (Graphics G = Graphics.FromImage(graph_canvas.Image))
{
    chart.draw_statics(G);
}
static_graph = graph_canvas.Image;

chart.draw_statics(G)包含几个绘制图例的功能,网格,...和 11 个非活动图形

我把这张图片保存成static_graph

目前为止,一切都好

当鼠标移动时,目的是鼠标指针更改为图形的颜色,并显示鼠标位置的坐标。

所以在鼠标移动为了节省时间和内存,我获取保存的图像并将活动图形绘制到该图像,而不是重新绘制所有图形。

private void graph_canvas_MouseMove(object sender, MouseEventArgs e)
{
    Point mouse_pos = e.Location;
    chart.set_mouse_pos(mouse_pos);
    graph_canvas.Image = (Image)static_graph.Clone();
    using (Graphics G = Graphics.FromImage(graph_canvas.Image))
    {
        chart.draw_actives(G);
    }
    graph_canvas.Invalidate();
}

public void draw_actives(Graphics surface)
{
    G = surface;
    draw_mouse();
}
private void draw_mouse()
{
    G.DrawLine(mouse_pen, new PointF(mouse_pos.X - 10, mouse_pos.Y), new PointF(mouse_pos.X + 10, mouse_pos.Y));
    G.DrawLine(mouse_pen, new PointF(mouse_pos.X, mouse_pos.Y-10), new PointF(mouse_pos.X, mouse_pos.Y+10));
}

当表单全屏显示时,我收到一条错误消息

类型为"System.OutOfMemoryException"的第一次机会异常 发生在系统绘图中.dll

使用鼠标输入绘制图表

问题可能与每次移动鼠标时需要越来越多的内存的Clone()调用有关。我建议你改成:

graph_canvas.Image = new Bitmap(static_graph);