Создать рисунок и сохранить его как растровое изображение - PullRequest
8 голосов
/ 21 мая 2010

У меня два вопроса:

1) У меня есть PictureBox, и его Dock установлен на Fill. Когда я изменяю размер Form, я не могу создать графический элемент для расширенной части PictureBox. В чем проблема?

2) Я хочу преобразовать рисунок, созданный на PictureBox, в Bitmap и сохранить его как * .JPG или * .bmp. Как я могу это сделать?

Ответы [ 4 ]

7 голосов
/ 21 мая 2010

вы можете использовать устройство-манипулятор , чтобы получить растровое изображение из поля изображения

Graphics g = pictureBox1.CreateGraphics();          
Bitmap bitMap = Bitmap.FromHbitmap(g.GetHdc());
bitMap.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg);

или даже лучше, если pictureBox не изменяет изображение, вы можете напрямую получить изображение из элемента управления pictureBox

pictureBox1.Image.Save("path", System.Drawing.Imaging.ImageFormat.Jpeg);
2 голосов
/ 20 мая 2016

Попробуйте, у меня отлично работает ...

    private void SaveControlImage(Control ctr)
    {
        try
        {
            var imagePath = @"C:\Image.png";

            Image bmp = new Bitmap(ctr.Width, ctr.Height);
            var gg = Graphics.FromImage(bmp);
            var rect = ctr.RectangleToScreen(ctr.ClientRectangle);
            gg.CopyFromScreen(rect.Location, Point.Empty, ctr.Size);

            bmp.Save(imagePath);
            Process.Start(imagePath);

        }
        catch (Exception)
        {
            //
        }
    }
0 голосов
/ 21 мая 2010

Когда размер Picturebox изменяется для заполнения формы, кажется, что его свойство Image остается неизменным.

Итак, вам нужно обработать событие PictureBox.OnSizeChanged и затем использовать следующий код для изменения размераизображение:

private void pictureBox1_SizeChanged(object sender, EventArgs e)
{
    if ((pictureBox1.Image != null))
    {
        pictureBox1.Image = new Bitmap(pictureBox1.Image, pictureBox1.Size);
    }
}

Для сохранения изображения используйте:

pictureBox1.Image.Save(filename, System.Drawing.Imaging.ImageFormat.Jpeg);

Надеюсь, что поможет!

0 голосов
/ 21 мая 2010

1) Ваше описание очень расплывчато. Вы получаете исключение? Это показывает неправильные результаты? Что происходит?

2) Вам необходимо получить изображение из PictureBox и использовать метод сохранения .

...