Шпаргалка по ZedGraph. Как сохранить нарисованные графики в файл в виде картинки | jenyay.net

Шпаргалка по ZedGraph. Как сохранить нарисованные графики в файл в виде картинки

Сохранять графики в картинки можно двумя способами. Первый способ - сохранить все изображение компонента ZedGraphControl в файл с помощью метода SaveAsBitmap(). В этом случае компонент возьмет на себя работу по созданию и показу диалога выбора имени файла.

Второй способ заключается в получении картинки (класса Bitmap) отдельной панели (GraphPane). Этот способ будет полезен, если нужно сохранить только один график из нескольких, созданных с помощью MasterPane.

Данный пример демонстрирует оба способа создания картинки.

Все примеры объединены в одном solution для Visual Studio 2005 и написаны на языке C#, скачать их можно отсюда.

Проект в примере - SaveBitmap

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Text;
using System.Windows.Forms;

using ZedGraph;


namespace SaveBitmap
{
    public partial class Form1 : Form
    {
        public Form1 ()
        {
            InitializeComponent ();

            // Подпишемся на события кнопок
            saveAsBitmapBtn.Click += new EventHandler (saveAsBitmapBtn_Click);
            savePane1.Click += new EventHandler (savePane1_Click);
            savePane2.Click += new EventHandler (savePane2_Click);

            DrawAllGraph ();
        }

        /// <summary>
        /// Сохранить картинку панели 1
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void savePane1_Click (object sender, EventArgs e)
        {
            SavePaneImage (0);
        }

        /// <summary>
        /// Сохранить картинку панели 2
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void savePane2_Click (object sender, EventArgs e)
        {
            SavePaneImage (1);
        }


        /// <summary>
        /// Сохранить картинку панели, указанной с помощью индекса
        /// </summary>
        /// <param name="index"></param>
        private void SavePaneImage (int index)
        {
            // ДИалог выбора имени файла создаем вручную
            SaveFileDialog dlg = new SaveFileDialog ();
            dlg.Filter = "*.png|*.png|*.jpg; *.jpeg|*.jpg;*.jpeg|*.bmp|*.bmp|Все файлы|*.*";

            if (dlg.ShowDialog () == DialogResult.OK)
            {
                // Получием панель по ее индексу
                GraphPane pane = zedGraph.MasterPane.PaneList[index];

                // Получаем картинку, соответствующую панели
                Bitmap bmp = pane.GetImage ();

                // Сохраняем картинку средствами класса Bitmap
                // Формат картинки выбирается исходя из имени выбранного файла
                if (dlg.FileName.EndsWith (".png"))
                {
                    bmp.Save (dlg.FileName, ImageFormat.Png);
                }
                else if (dlg.FileName.EndsWith (".jpg") || dlg.FileName.EndsWith (".jpeg"))
                {
                    bmp.Save (dlg.FileName, ImageFormat.Jpeg);
                }
                else if (dlg.FileName.EndsWith (".bmp"))
                {
                    bmp.Save (dlg.FileName, ImageFormat.Bmp);
                }
                else
                {
                    bmp.Save (dlg.FileName);
                }
            }
        }


        /// <summary>
        /// Обработчик нажатия на кнопку "Сохранить все графики"
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void saveAsBitmapBtn_Click (object sender, EventArgs e)
        {
            // Для сохранения картинки всего компонента ZedGraphControl
            // достаточно вызвать метод SaveAsBitmap().
            // Создание и показ диалога выбора имени файла возьмет на себя ZedGraphControl
            zedGraph.SaveAsBitmap ();
        }


        /// <summary>
        /// Создать два графика с помощью MasterPane
        /// </summary>
        private void DrawAllGraph ()
        {
            MasterPane masterPane = zedGraph.MasterPane;
            masterPane.PaneList.Clear ();

            int count = 2;

            for (int i = 0; i < count; i++)
            {
                // Создаем экземпляр класса GraphPane, представляющий собой один график
                GraphPane pane = new GraphPane ();

                // Нарисуем график на панели
                DrawSingleGraph (pane);

                // Добавим график в MasterPane
                masterPane.Add (pane);
            }

            // Будем размещать добавленные графики в MasterPane
            using (Graphics g = CreateGraphics ())
            {
                // Графики будут размещены в две строки,
                masterPane.SetLayout (g, PaneLayout.SingleColumn);
            }

            // Обновим оси и перерисуем график
            zedGraph.AxisChange ();
            zedGraph.Invalidate ();
        }


        private double f (double x)
        {
            if (x == 0)
            {
                return 1;
            }

            return Math.Sin (x) / x;
        }


        private void DrawSingleGraph (GraphPane pane)
        {
            // Очистим список кривых
            pane.CurveList.Clear ();

            // Создадим список точек
            PointPairList list = new PointPairList ();

            double xmin = -50;
            double xmax = 50;

            // Заполняем список точек
            for (double x = xmin; x <= xmax; x += 0.01)
            {
                // добавим в список точку
                list.Add (x, f (x));
            }

            // Создадим кривую
            pane.AddCurve ("", list, Color.Blue, SymbolType.None);
        }
    }
}

Вернуться к остальным примерам

Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
5 stars

Рейтинг 4.7/5. Всего 3 голос(а, ов)




Подписаться на комментарии
Автор:
Тема:
 Ваш комментарий
 
 
Введите код 467