Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2011, 22:11   #1
tantema
Пользователь
 
Аватар для tantema
 
Регистрация: 05.11.2010
Сообщений: 10
По умолчанию Сохранение изображения в формате .bmp

Моя программа рисует круговые диаграммы. Есть поля для ввода названия диаграммы/количества секторов в ней/данных диаграммы(название предмета и его количество). Все эти данные помещаются в 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)
                {
                    //здесь с помощью case выбирается цвет
                }

                // из-за округления возможна ситуация
                // при которой будет промежуток между
                // последним и первым секторами
                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;
            }

        }
tantema вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка BMP в Simple Graph и сохранение в BMP формат artemavd Общие вопросы Delphi 10 02.10.2010 14:19
Сохранение части изображения из TImage в файл *.bmp ImmortalAlexSan Общие вопросы Delphi 15 02.08.2010 13:00
изображения в формате PCX iggor Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 19.12.2009 23:45
Создание графиков в формате bmp AleksP Общие вопросы C/C++ 1 09.10.2008 17:10