Как сохранить нарисованное изображение в формате 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; //дальше идет прорисовка диаграммы }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д