Как сохранить Graphics в картинку?
Я пишу проект основанный на WinFroms.
Создал Panel элемент. Переопределил метод отрисовки Canvas_Paint.
Хочу всё, что я успел отрисовать на e.Graphis сохранить в картинку (png). Как я могу это сделать?
На форуме уже есть ответы, однако они мне не подходят. Там сначала создают Bitmap, а из него создают Graphics. А у меня Graphics приходит в качестве аргумента.
private void Canvas_Paint(object sender, PaintEventArgs e)
{
e.Graphics.Clear(_backgroundColor);
NormalizeView(e.Graphics);
DrawAxes(Canvas.CreateGraphics());
DrawGraph(e.Graphics);
}
Ответы (1 шт):
Автор решения: Blackmeser
→ Ссылка
class PanelImage : Panel
{
public Bitmap Bitmap { get; set; }
public Graphics BitmapGraphics => Graphics.FromImage(Bitmap);
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
e.Graphics.DrawImage(Bitmap, e.ClipRectangle);
}
public PanelImage()
{
Bitmap = new Bitmap(this.Size.Width, this.Size.Height);
}
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
Bitmap = new Bitmap(Bitmap, this.Size);
}
}
Что вам нужно сделать:
- Рисуете всё, что вам нужно на Bitmap через BitmapGraphics
- Применяете обновляете PanelImage, OnPaint сам всё сделает за вас
- Сохранить можете через PanelImage.Bitmap.Save() в нужный вам файл
Например:Bitmap.Save("1.png", System.Drawing.Imaging.ImageFormat.Png)
PS Пока рисуете/обновляете график - не обновляйте сам PanelImage, это медленно, просто считайте области обновления прямоугольниками, и складывайте их через: Rectangle.Union, а потом просто вызываете обновления области PanelImage.Invalidate(rectangle)