Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 04.02.2016
Сообщений: 4

Многократное изменение изображения в PictureBox

08.07.2016, 12:33. Показов 1605. Ответов 4

Студворк — интернет-сервис помощи студентам
Добрый день!
Подскажите пожалуйста, можно ли сделать так, чтобы можно было загружать изображение в PictureBox из файлов компьютера, сохранять его в bin-Debug файле программы, не используя SaveFileDialog, а просто программно. При последующей загрузке программы, сохраненное изображение должно отображаться. При этом у пользователя есть возможность изображение изменить, и при последующей загрузке программы отображаться должно именно последнее изображение.

Я пробовала сделать сама, но на третьей загрузке изображения программа выдает ошибку на сохранение файла:"Additional information: В GDI+ возникла ошибка общего вида."

Пожалуйста помогите, я в еще только начинаю C# изучать, поэтому не все понимаю.
Вот код, который у меня получилось сделать:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
public partial class Form1 : Form
    {
        bool a = false;
        System.Drawing.Image img;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (button1.Text == "Добавить изображение")
            {
                pictureBox1.Image = null;
 
                OpenFileDialog open_dialog = new OpenFileDialog();
                open_dialog.Filter = "Image Files(*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG|All files (*.*)|*.*";
                if (open_dialog.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                        img = new Bitmap(open_dialog.FileName);
                        this.pictureBox1.Size = new System.Drawing.Size(270, 343);
                        pictureBox1.Image = img;
                        pictureBox1.Invalidate();
 
                    }
                    catch
                    {
                        DialogResult rezult = MessageBox.Show("Невозможно открыть выбранный файл",
                        "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                        img.Save("pic.jpg");
                }
            }
 
            if (button1.Text == "Изменить изображение")
            {
                pictureBox1.Image = null;
 
                OpenFileDialog open_dialog = new OpenFileDialog();
                open_dialog.Filter = "Image Files(*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG|All files (*.*)|*.*";
                if (open_dialog.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                        img = new Bitmap(open_dialog.FileName);
                        this.pictureBox1.Size = new System.Drawing.Size(270, 343);
                        pictureBox1.Image = img;
                        pictureBox1.Invalidate();
 
                    }
                    catch
                    {
                        DialogResult rezult = MessageBox.Show("Невозможно открыть выбранный файл",
                        "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
 
                    img.Save("pic1.jpg");                    
                }
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            if (File.Exists("pic1.jpg") == true)
            {
                if (File.Exists("pic.jpg") == true)
                    File.Delete("pic.jpg");
                pictureBox1.Load("pic1.jpg");
            }
 
            if (File.Exists("pic.jpg") == true && File.Exists("pic1.jpg") == false)
            {
                pictureBox1.Load("pic.jpg");
            }
 
            if (pictureBox1.Image == null)
                button1.Text = "Добавить изображение";
            else
                button1.Text = "Изменить изображение";
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.07.2016, 12:33
Ответы с готовыми решениями:

Изменение цвета многоугольной области изображения в picturebox
Столкнулась с такой проблемой: необходимо выделить многоугольником область на изображении, предварительно загруженного в picturebox,...

Склеивание изображения нескольких picturebox в один picturebox
Здравствуй, такой вопрос возник на счет picturebox. Можно ли из 3-ех к примеру picturebox(в каждом одинаковая картинка) Склеить все...

Как добиться качественного рисования изображения поверх изображения picturebox?
есть код: PictureBox p = (PictureBox)sender; p.SizeMode = PictureBoxSizeMode.Normal; ...

4
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
09.07.2016, 04:01
Цитата Сообщение от EkaterinaGaw Посмотреть сообщение
img.Save("pic1.jpg");
C#
1
img.Save("pic1.jpg"б ImageFormat.Jpg);
0
0 / 0 / 0
Регистрация: 04.02.2016
Сообщений: 4
09.07.2016, 12:13  [ТС]
Именно так как Вы написали, программа выдает ошибку, пишет что вот так надо:
C#
1
img.Save("pic1.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
.
Но потом выдает ошибку "Additional information: В GDI+ возникла ошибка общего вида.".

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

Добавлено через 1 час 43 минуты
Нашла решение (правда оно скорее всего не совсем корректное, но работает).

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
public partial class Form1 : Form
    {
        System.Drawing.Image img;
        int m;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (button1.Text == "Добавить изображение")
            {
                pictureBox1.Image = null;
 
                OpenFileDialog open_dialog = new OpenFileDialog();
                open_dialog.Filter = "Image Files(*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG|All files (*.*)|*.*";
                if (open_dialog.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                        img = new Bitmap(open_dialog.FileName);
                        this.pictureBox1.Size = new System.Drawing.Size(270, 343);
                        pictureBox1.Image = img;
                        pictureBox1.Invalidate();
 
                    }
                    catch
                    {
                        DialogResult rezult = MessageBox.Show("Невозможно открыть выбранный файл",
                        "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    img.Save("pic.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                }
            }
 
            if (button1.Text == "Изменить изображение")
            {
                pictureBox1.Image = null;
 
                OpenFileDialog open_dialog = new OpenFileDialog();
                open_dialog.Filter = "Image Files(*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG|All files (*.*)|*.*";
                if (open_dialog.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                        img = new Bitmap(open_dialog.FileName);
                        this.pictureBox1.Size = new System.Drawing.Size(270, 343);
                        pictureBox1.Image = img;
                        pictureBox1.Invalidate();
 
                    }
                    catch
                    {
                        DialogResult rezult = MessageBox.Show("Невозможно открыть выбранный файл",
                        "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
 
                    int im;
                    for (im=10; im>0; im--)
                    {
                        if (File.Exists("pic" + im + ".jpg") != true)
                        {
                            m = im;
                        }
                        if (m == 10 && im < 7)
                            File.Delete("pic" + im + ".jpg");
                        if (m == 2 && im > 7)
                            File.Delete("pic" + im + ".jpg");
                    }
 
                    img.Save("pic" + m + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
 
                    using (System.IO.StreamWriter file = new System.IO.StreamWriter("Pic.txt"))
                    {
                        file.WriteLine(m);
                    }
                }
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            using (StreamReader reader = new StreamReader("Pic.txt"))
            {
                string mass = reader.ReadLine();
                m = int.Parse(mass);
            }
 
            if (File.Exists("pic.jpg") == true)
            {
                pictureBox1.Load("pic.jpg");
            }
            if (File.Exists("pic" + m + ".jpg") == true)
            {
                pictureBox1.Load("pic" + m + ".jpg");
                File.Delete("pic.jpg");
            }
 
            if (pictureBox1.Image == null)
                button1.Text = "Добавить изображение";
            else
                button1.Text = "Изменить изображение";
        }
    }
}
Создается массив чисел и изображения сохраняются с числом элемента этого массива в имени. А чтобы оно запоминалось, сделала запись числа в файл "Pic.txt". Ну и через несколько элементов старые файлы удаляются.

К сожалению, работает не идеально - если несколько раз менять изображение, не закрывая программу, - выдает ошибку.
Поэтому, если найдется более корректный вариант будет здорово.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
09.07.2016, 16:46
Лучший ответ Сообщение было отмечено EkaterinaGaw как решение

Решение

EkaterinaGaw,
попробуйте так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
 
    private void button1_Click(object sender, EventArgs e)
    {
        OpenFileDialog open_dialog = new OpenFileDialog();
        open_dialog.Filter = "Image Files(*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG|All files (*.*)|*.*";
        if (open_dialog.ShowDialog() == DialogResult.OK)
        {
            try
            {
                pictureBox1.Image = GetImage(open_dialog.FileName);
                File.Copy(open_dialog.FileName, "pic.jpg", true);
                button1.Text = "Изменить изображение";
            }
            catch
            {
                MessageBox.Show("Невозможно открыть выбранный файл", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
 
    private void Form1_Load(object sender, EventArgs e)
    {
        if (File.Exists("pic.jpg") == true)
        {
            try
            {
                pictureBox1.Image = GetImage("pic.jpg");
                button1.Text = "Изменить изображение";
            }
            catch
            {
                button1.Text = "Добавить изображение";
            }
        }
        else
            button1.Text = "Добавить изображение";
    }
 
    Bitmap GetImage(string fileName)
    {
        Bitmap image;
        using (FileStream stream = new FileStream(fileName, FileMode.Open))
        {
            image = new Bitmap(stream);
        }
        return image;
    }
}
1
0 / 0 / 0
Регистрация: 04.02.2016
Сообщений: 4
09.07.2016, 17:43  [ТС]
Спасибо огромное! Все работает!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.07.2016, 17:43
Помогаю со студенческими работами здесь

Сохранение изображения из PictureBox
Вечер добрый. В pictureBox рисую график Graphics graph = pictureBox1.CreateGraphics(); Pen myPen = new...

Сохранение изображения из Picturebox
Всем здравствуйте, у меня возник такой вот вопрос в процессе выполнения курсовой, пытаюсь я сохранить изображение фигуры полученного путем...

Просмотр изображения из picturebox
Считываю изображение из datagridView в picturebox таким образом: private void dataGridView1_CellEnter(object sender,...

Печать изображения из picturebox
Как распечатать изображение из picturebox сохраняя пропорции по отношению к листу А4,т.е. чтобы при печати картинка с большим разрешением...

Перемещение изображения в PictureBox
Доброго времени суток! 8-) - Имеется джостик подключенный к ПК через COMPort; - В программе форма с PictureBox с нарисованными осями...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru