Как сохранить нарисованное изображение в формате bmp - C#

Узнай цену своей работы

Формулировка задачи:

Моя программа рисует круговые диаграммы. Есть поля для ввода названия диаграммы/количества секторов в ней/данных диаграммы(название предмета и его количество). Все эти данные помещаются в ListBox. Трудность состоит в том, чтобы сохранить нарисованную программой диаграмму в формате .bmp. Код создания диаграммы:
        //создание круговой диаграммы
        private void начертитьДиагToolMenu_Click(object sender, EventArgs e)
        {
            panel1.Visible = false;         
            try
            {       
                //считываем заголовок диаграммы
                header = Convert.ToString(listBox1.Items[0]);
                
                //считывание количества секторов и инициализация массивов
                N = Convert.ToInt16(listBox1.Items[1]);
                dat = new double[N];
                p = new double[N];
                title = new string[N];
                
                //читаем данные 
                int i = 0;          
                for (int index = 2; index < listBox1.Items.Count-1; index++)
                {
                    title[i] = Convert.ToString(listBox1.Items[index]);
                    dat[i++] = Convert.ToDouble(listBox1.Items[++index]);
                }
 
                //процедура обработки рисования диаграммы
                this.Paint += new PaintEventHandler(Diagram);
 
                double sum = 0;
                int j = 0;
                //вычислить сумму
                for (j = 0; j < N; j++)
                    sum += dat[j];
                //вычислить долю каждой категории
                for (j = 0; j < N; j++)
                    p[j] = (double)(dat[j] / sum);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Диаграмма", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
 
        void Diagram(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Font hFont = new Font("Tahoma", 16);
            int w = (int)g.MeasureString(header, hFont).Width;
            int x = (this.ClientSize.Width - w) / 2 + 170;
 
            g.DrawString(header, hFont, System.Drawing.Brushes.Black, x, 30);
 
            Font lFont = new Font("Tahoma", 9);
 
            int diam = ClientSize.Height - 180;
            int x0 = 300;
            int y0 = 90;
 
            int lx = 310 + diam;
            int ly = y0 + (diam - N * 20 + 10) / 2;
 
            int swe;
 
            Brush fBrush = Brushes.White;
            // начальная точка дуги сектора
            int sta = -90;
 
            // рисуем диаграмму
            for (int i = 0; i < N; i++)
            {
                // длинна дуги
                swe = (int)(360 * p[i]);
 
                // задать цвет сектора
                switch (i)
                {
                  //выбор цвета сектора
                }
 
                // из-за округления возможна ситуация
                // при которой будет промежуток между
                // последним и первым секторами
                if (i == N - 1)
                {
                    // последний сектор
                    swe = 270 - sta;
                }
 
                // рисуем сектор
                g.FillPie(fBrush, x0, y0, diam, diam, sta, swe);
 
                // рисуем границу сектора
                g.DrawPie(System.Drawing.Pens.Black, x0, y0, diam, diam, sta, swe);
 
                // прямоугольник легенда
                g.FillRectangle(fBrush,
                          lx, ly + i * 20, 20, 10);
                g.DrawRectangle(System.Drawing.Pens.Black,
                          lx, ly + i * 20, 20, 10);
 
                // подпись
                g.DrawString(title[i] + " - " + p[i].ToString("P"), lFont, System.Drawing.Brushes.Black,
                                                  lx + 24, ly + i * 20 - 3);
 
                // начальная точка дуги для следующего сектора
                sta += swe;
                
                начертитьДиагToolMenu.Enabled = false;
            }
 
        }

Решение задачи: «Как сохранить нарисованное изображение в формате bmp»

textual
Листинг программы
private void начертитьДиагToolMenu_Click(object sender, EventArgs e)
        {
                //процедура обработки рисования диаграммы
                this.pictureBox1.Paint += new PaintEventHandler(Diagram);
                pictureBox1.Invalidate();
         }
 void Diagram(object sender, PaintEventArgs e)
        { 
            Bitmap bmp = new Bitmap((int)415, (int)355);
            pictureBox1.Image = bmp;
            pictureBox1.Image = (Image)new Bitmap(pictureBox1.Width, pictureBox1.Height);
            Graphics g = Graphics.FromImage (pictureBox1.Image);
 
            Font hFont = new Font("Tahoma", 16);
            g.DrawString(header, hFont, System.Drawing.Brushes.Black, 100, 30);
 
            Font lFont = new Font("Tahoma", 9);
 
            int diam = 100;//(int)(pictureBox1.ClientSize.Width) -150;
            int x0 = 60;
            int y0 = 60;
 
            int lx = 200 + diam;
            int ly = y0 + (diam - N * 20 + 10) / 2;
            //дальше идет прорисовка диаграммы
         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы