Модераторы: gambit, Partizan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сохранить нарисованную картинку в файл? 
:(
    Опции темы
mr.DUDA
Дата 3.12.2006, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Цитата(Elfet @  3.12.2006,  15:53 Найти цитируемый пост)
Я не понял как это работает  gr и e, gr и bmp никак же не взаимодействуют? А если я хочу сохранить в файл(jpg) по собиытию? По нажатию кнопки?

Хде эта твоя картинка лежит? В пикчербоксе? Я ж пример дал, где она с нуля рисуется, PaintEventArgs вообще можно не юзать, размеры брать любые, и e.Graphics.DrawImage(bmp, Point.Empty); необязательно.


--------------------
user posted image
PM MAIL WWW   Вверх
Elfet
Дата 3.12.2006, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Код

        private void picture_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Pen peakPen = new Pen(Brushes.Green, 1);
            Pen selectedPeakPen = new Pen(Brushes.HotPink, 1);
            Font stringFont = new Font("Microsoft Sans Serif", 8);
            Brush stringBrush = Brushes.Gray;
            Pen ribPen = new Pen(Brushes.Goldenrod, 1);
            Pen ribDirectPen = new Pen(Brushes.Goldenrod, 1);
            Pen selectedWayRib = new Pen(Brushes.Purple, 2);
            Pen selectedWayRibDirect = new Pen(Brushes.Purple, 2);
            float arrowWidth = 8.0F;
            float arrowHeight = 4.0F;

            foreach (Rib i in cahceRibs)
            {
                if (i.direct)
                {
                    int x1 = i.p1.x;
                    int y1 = i.p1.y;
                    int x2 = i.p2.x;
                    int y2 = i.p2.y;
                    ribDirectPen.CustomEndCap = new System.Drawing.Drawing2D.AdjustableArrowCap(arrowHeight, arrowWidth);
                    g.DrawLine(ribDirectPen, x1, y1, x2, y2);
                }
                else
                {
                    g.DrawLine(ribPen, i.p1.x, i.p1.y, i.p2.x, i.p2.y);
                }
            }

            foreach (Peak curent in cachePeaks)
            {
                if ((selectedTool == 1 || selectedTool == 3 || selectedTool == 4)
                    && !selectFirst
                    && curent.numer == fromFirst.numer)
                {
                    g.DrawEllipse(selectedPeakPen, curent.x - PeakRadius, curent.y - PeakRadius, PeakRadius * 2, PeakRadius * 2);
                }
                else
                {
                    g.DrawEllipse(peakPen, curent.x - PeakRadius, curent.y - PeakRadius, PeakRadius * 2, PeakRadius * 2);
                }
                g.DrawString(curent.numer.ToString(), stringFont, stringBrush, curent.x + PeakRadius / 2, curent.y + PeakRadius / 2);
            }
        }

Как мне это сохранить по нажатию кнопки?


--------------------
PM MAIL WWW Skype   Вверх
mr.DUDA
Дата 3.12.2006, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 24
Всего: 232



Добавить в начале picture_Paint, вместо "Graphics g = ...":

Код
Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics g = Graphics.FromImage(bmp);


И в конце метода:

Код

bmp.Save(@"c:\1.jpg");
e.Graphics.DrawImage(bmp, Point.Empty);


Скажи, чем это отличается от первого моего примера ?


--------------------
user posted image
PM MAIL WWW   Вверх
Elfet
Дата 8.12.2006, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Вот так вот можно? smile
Код

        private Bitmap pictureBmp;
        private void picture_Paint(object sender, PaintEventArgs e)
        {
            pictureBmp = new Bitmap(picture.Width, picture.Height);
            Graphics g = Graphics.FromImage(pictureBmp);
            g.SmoothingMode = SmoothingMode.HighQuality;

            ...........................................

        private void toolStripButtonThumb_Click(object sender, EventArgs e)
        {
            if (saveFileDialogPicture.ShowDialog() == DialogResult.OK)
            {
                pictureBmp.Save(saveFileDialogPicture.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
        }



--------------------
PM MAIL WWW Skype   Вверх
ivashkanet
Дата 8.12.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 11
Всего: 149



Elfet, можно. Но Метод Паинт вызывается ууууууууж оооооооооооооооочччччччччччееень часто.
Поэтому твоя производительность и память немного пострадают. Так как ты будешь менять БМП-шку каждый такой раз.
Лучше всего сделать:

Код

        private void toolStripButtonThumb_Click(object sender, EventArgs e)
        {
            Bitmap pictureBmp = new Bitmap(picture.Width, picture.Height);
            Graphics g = Graphics.FromImage(pictureBmp);

            // т.е. рисуем картинку, но уже на самом битмапе
            picture_Paint(null, new PaintEventArgs(g, pictureBox1.ClientRectangle))


            if (saveFileDialogPicture.ShowDialog() == DialogResult.OK)
            {
                pictureBmp.Save(saveFileDialogPicture.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
        }

PM MAIL WWW ICQ   Вверх
Elfet
Дата 8.12.2006, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



smile Ок. спасибо всем smile 
Просто я с этой картикной работаю в программе. На ней я мышкой рисую свой граф. Что получится потом покажу smile


--------------------
PM MAIL WWW Skype   Вверх
Elfet
Дата 16.12.2006, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Вот что получилось: Graph Simple smile


--------------------
PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0639 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.