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

Поиск:

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


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


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

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



Как сохранить нарисованную картинку в файл?  smile

Добавлено @ 14:02 
Вот так можно? 
Код

                Bitmap pic = new Bitmap(100,100);
                Rectangle rect = new Rectangle(0,0,100,100);
                picture.DrawToBitmap(pic, rect);
                pic.Save(saveFileDialogPicture.FileName);



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


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


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

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



Помогите сохранить только нужную часть картинки! У меня не выходит:
Код

                Rib diagonal = graph1.FindMaxDiagonal();
                Bitmap pic = new Bitmap(
                    diagonal.x2 - diagonal.x1 + 50,
                    diagonal.y2 - diagonal.y1 + 50
                    );
                int fromX = 0, fromY = 0;

                if (diagonal.x1 - 50 > 0)
                    fromX = diagonal.x1 - 50 + picture.Left;
                if (diagonal.y1 - 50 > 0)
                    fromY = diagonal.y1 - 50 + picture.Top;

                int toW = diagonal.x2 - diagonal.x1 + 100;
                int toH = diagonal.y2 - diagonal.y1 + 100;
                if(fromX + toW > picture.Width)
                    toW = picture.Width - fromX;
                if(fromY + toH > picture.Height)
                    toH = picture.Height - fromY;
                Rectangle rect = new Rectangle(
                    fromX,
                    fromY,
                    toW,
                    toH
                    );
                picture.DrawToBitmap(pic, rect);
                pic.Save(saveFileDialogPicture.FileName);

 Rib diagonal = graph1.FindMaxDiagonal();
diagonal.x1 - min X
diagonal.y1 - min Y
diagonal.x2 - max X
diagonal.y2 - max Y



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


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


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

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



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


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 1
Всего: 15



Цитата(Elfet @  23.11.2006,  15:58 Найти цитируемый пост)
picture.DrawToBitmap(pic, rect);
                pic.Save(saveFileDialogPicture.FileName);


Так ты рисуешь picture, а сохраняешь pic.

picture.Save(....)



--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
Elfet
Дата 23.11.2006, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(ivashkanet @  23.11.2006,  16:03 Найти цитируемый пост)
bmp-фаил 

Это к чем?

Цитата(Naum @  23.11.2006,  17:00 Найти цитируемый пост)
picture.Save(....)

Цитата

Error    1    'System.Windows.Forms.PictureBox' does not contain a definition for 'Save'    C:\...\Form1.cs    214    25    Graph Simple



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


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


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

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



Рисовать надо в Graphics, в который выбрать Bitmap. Вот этот битмап потом можно и сохранить в файл.
PM MAIL WWW   Вверх
ivashkanet
Дата 23.11.2006, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Elfet @  23.11.2006,  15:12 Найти цитируемый пост)
Цитата(ivashkanet @  23.11.2006,  16:03 Найти цитируемый пост)
bmp-фаил 

Это к чем?


Цитата(Elfet @  23.11.2006,  13:58 Найти цитируемый пост)
Помогите сохранить только нужную часть картинки! У меня не выходит:


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


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


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

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



Цитата(mr.DUDA @  23.11.2006,  17:59 Найти цитируемый пост)
Рисовать надо в Graphics, в который выбрать Bitmap. Вот этот битмап потом можно и сохранить в файл. 

Ой. А я не понял smile  smile 

Это вот это?

Цитата(Piphon @  15.11.2006,  10:16 Найти цитируемый пост)
if (ofd.ShowDialog() == DialogResult.OK)
{
  Image img = Image.FromFile(ofd.FileName);
  int sc_w = (int) img.Width / 2;
  int sc_h = (int) img.Height / 2;
  Image scale_img = new Bitmap(sc_w, sc_h);
  Graphics gr = Graphics.FromImage(scale_img);
  Rectangle rect_dest = new Rectangle(0,0,sc_w, sc_h);
  Rectangle rect_srch = new Rectangle(0,0,sc_w, sc_h);
  gr.DrawImage(img, rect_dest, rect_srch, GraphicsUnit.Pixel);
  this.pictureBox1.Image = scale_img;
}

Но это же загрузка.


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


wasm
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 16.1.2006

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



Цитата(Elfet @  23.11.2006,  21:51 Найти цитируемый пост)
Но это же загрузка

тяжелый случай...

Код

            OpenFileDialog ofd = new OpenFileDialog();
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                Image img = Image.FromFile(ofd.FileName);
                int sc_w = (int)img.Width / 2;
                int sc_h = (int)img.Height / 2;
                Image scale_img = new Bitmap(sc_w, sc_h);
                Graphics gr = Graphics.FromImage(scale_img);
                Rectangle rect_dest = new Rectangle(0, 0, sc_w, sc_h);
                Rectangle rect_srch = new Rectangle(0, 0, sc_w, sc_h);
                gr.DrawImage(img, rect_dest, rect_srch, GraphicsUnit.Pixel);
                this.pictureBox1.Image = scale_img;
                FileInfo fi = new FileInfo(ofd.FileName);
                scale_img.Save("C:\\crop_file" + fi.Extension);
            }



--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
Elfet
Дата 24.11.2006, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Не хочет работать. Глюк выдаёт. Поясни код, пожалуйста.


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


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


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

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



Пример:
Код
using System;
using System.Drawing;

class Program
{
    static void Main()
    {
        using (Bitmap bmp = new Bitmap(100, 100))
        {
            using (Graphics gr = Graphics.FromImage(bmp))
            {
                gr.FillRectangle(Brushes.Green, gr.ClipBounds);
                gr.DrawString("Test", SystemFonts.MenuFont, Brushes.White, Point.Empty);
            }

            bmp.Save(@"c:\1.bmp");
        }
    }
}


P.S. для консольного приложения нужно добавить референс на System.Drawing.dll, для WinForms не надо он уже есть.


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


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


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

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



Что то я не понял примера smile 
Вообщем я в PictureBox рисую картинку. Как мне её сохранить в файл (JPG)?  smile  smile 

PS тока не бейте!  smile 


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


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


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

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



 smile 
Код

                System.IO.FileStream fs = (System.IO.FileStream)saveFileDialogPicture.OpenFile();
                picture.Image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);



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


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


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

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



Elfet, поясняю:

в пикчербокс не рисовать напрямую, иначе не получим контроль над тем, куда идёт отрисовка; вместо, подписываемся на событие PictureBox.Paint, и в обработчике создаём новый Bitmap и новый Graphics (битмап будем сохранять в файл, а графикс - то на чём отрисовываем, и попадает в битмап). Пример:

Код
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

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

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            using (Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height))
            {
                using (Graphics gr = Graphics.FromImage(bmp))
                {
                    Brush brush = new LinearGradientBrush(e.ClipRectangle,
                        Color.White, Color.Red, LinearGradientMode.Vertical);
                    gr.FillRectangle(brush, e.ClipRectangle);
                    gr.DrawString("Vingrad Forum Is COOL !!!", SystemFonts.DefaultFont,
                        Brushes.Black, new Point(e.ClipRectangle.Width / 2 - 100, e.ClipRectangle.Height / 2));
                }
                bmp.Save(@"c:\1.jpg");
                e.Graphics.DrawImage(bmp, Point.Empty);
            }
        }
    }
}



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


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


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

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



Я не понял как это работает smile gr и e, gr и bmp никак же не взаимодействуют? А если я хочу сохранить в файл(jpg) по собиытию? По нажатию кнопки?


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

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


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

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


 




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


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

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