Я создаю программу диаграммы, которая отображает до 12 разных графиков. Все графики должны быть видны одновременно.рисовать диаграммы с мышь ввода
Должен быть возможно изменить активный график с помощью мыши.
я построить диаграмму, как это:
using (Graphics G = Graphics.FromImage(graph_canvas.Image))
{
chart.draw_statics(G);
}
static_graph = graph_canvas.Image;
chart.draw_statics (G) содержит несколько Funtions рисовать легенды, сетки, ... и 11 неактивных график
сохраняет это изображение в static_graph
до сих пор так хорошо
при перемещении мыши, намерение состоит в том, что указатель мыши на прим графике в r и отображает координаты положения мыши.
поэтому в mousemove , чтобы сэкономить время и память, я беру сохраненное изображение и рисую активный график, а не перерисовывая все графики.
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» произошло в System.Drawing.dll
Это забавно, чтобы попытаться 'спасти [...] memory' и в конечном итоге с OutOfMemory ошибки :) Я хотел бы посмотреть вокруг линии Clone(). –
Спасибо Томас! Это сделал трюк! Изменена линия clone() на graph_canvas.Image = new Bitmap (static_graph); и постройте растровое изображение static_graph следующим образом: graph_canvas.DrawToBitmap (static_graph, новый Rectangle (новая точка (graph_canvas.Top, graph_canvas.Left), graph_canvas.Size)); – Blob