none
Сохранение измененнго picturebox RRS feed

  • Общие обсуждения

  • Всем привет!

    Столкнулся с проблемой, при сохранении измененного picturebox появляется его первоначальное состояние.

    Начну с начала, суть создать программу которая будет вставлять фотографии в рамку. Фотографии загружаются в круглый picturebox2, который находится поверх picturebox1 который является рамкой.

                System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();
                path.AddEllipse(0, 0, 120, 120);
                Region rgn = new Region(path);
                pictureBox2.Region = rgn;

    Далее пытаюсь объединить picturebox и сохранить в файл.

                Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
                pictureBox1.DrawToBitmap(bmp, new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height));
                pictureBox2.DrawToBitmap(bmp, new Rectangle(pictureBox2.Location.X - pictureBox1.Location.X, pictureBox2.Location.Y - pictureBox1.Location.Y, pictureBox2.Width, pictureBox2.Height));
    
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.DefaultExt = "bmp";
                sfd.Filter = "Image files (*.bmp)|*.bmp|All files (*.*)|*.*";
            
                if (sfd.ShowDialog() == DialogResult.OK)
                bmp.Save(sfd.FileName);
    Понимаю что проблема в строчке
                pictureBox2.DrawToBitmap(bmp, new Rectangle(pictureBox2.Location.X - pictureBox1.Location.X, pictureBox2.Location.Y - pictureBox1.Location.Y, pictureBox2.Width, pictureBox2.Height));
    
    но не могу подобрать ее аналога для подобного случая.

    И попутно хочу поинтересоваться, если я захочу добавить текст на фотографию, то каким путем это лучше сделать?

    Буду рад советам, спасибо!

    8 декабря 2015 г. 10:58

Все ответы

  • Я когда-то делал проще:

    1) Создать 2 битмапа. Один (который для рамки) с альфа-каналом. Второй (фото) - можно как угодно.

    2) Рисуем (или загружаем) в 1 битмапе рамку, во 2-й - фотку..

    3)PictureBox - один, в BackgroundImage - рамку (BackgroundImageLayot=Stretch). В Image - фотку (SizeMode=Zoom).

    4) Колесо мыши - масштабирование фотки. MouseMove с нажатой кнопкой - перемещение фотки внутри рамки.

    5) Объединение рамки и фотки через .DrawImage(....)

    Пы.Сы. Сейчас исходников нет, поэтому только алгоритм в общих чертах.


    Alexandr_Smirnoff


    14 декабря 2015 г. 3:04