Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
15 / 15 / 11
Регистрация: 07.02.2013
Сообщений: 168
1

"Недостаточно памяти" при загрузке нескольких картинок в pictureBox

25.06.2015, 17:33. Показов 2159. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Отстраиваю, несколько этак 15-50 картинок на пенеле. И вылитает сообщение: об ошибке "Недостаточно памяти". Делаю это так:
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
 for (int i = 0; i < pic_new.Length; i++)
                {
 
                    pic_new[i] = new PictureBox();
                    pic_loaded_dell[i] = new PictureBox();
 
                    try
                    {
                        pan_new.Controls.Add(pic_new[i]);
                        this.pic_new[i].Size = new System.Drawing.Size(135, 135);
                        count = (int)Math.Floor(Convert.ToDecimal(i / 4));
                        if (count < 1)
                        {
                            if (i == 0)
                            {
                                this.pic_new[i].Location = new System.Drawing.Point(5, nadpis_new.Location.Y + nadpis_new.Size.Height + 3);
                            }
                            else
                            {
                                this.pic_new[i].Location = new System.Drawing.Point(pic_new[i - 1].Location.X + pic_new[i - 1].Size.Width + 5, nadpis_new.Location.Y + nadpis_new.Size.Height + 3);
                            }
                        }
                        else
                        {
                            if (i % 4 == 0)
                            {
                                this.pic_new[i].Location = new System.Drawing.Point(pic_new[count * 4 - 4].Location.X, pic_new[count * 4 - 4].Location.Y + pic_new[count * 4 - 4].Size.Height + 3);
                            }
                            else
                            {
                                this.pic_new[i].Location = new System.Drawing.Point(pic_new[i - 1].Location.X + pic_new[i - 1].Size.Width + 5, pic_new[count * 4 - 4].Location.Y + pic_new[count * 4 - 4].Size.Height + 3);
                            }
                        }
 
 
                        this.pic_new[i].Name = "p_n" + i;
                        this.pic_new[i].Image = Image.FromFile(dataGridView2.Rows[i].Cells[0].Value.ToString());
                        this.pic_new[i].SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
                        this.pic_new[i].BackColor = Color.Transparent;
 
 
                        pan_new.Controls.Add(pic_loaded_dell[i]);
                       
 
                        System.GC.Collect();
                    }
                    catch (SecurityException ex)
                    {
                        // The user lacks appropriate permissions to read files, discover paths, etc.
                        MessageBox.Show("Security error. Please contact your administrator for details.\n\n" +
                            "Error message: " + ex.Message + "\n\n" +
                            "Details (send to Support):\n\n" + ex.StackTrace
                        );
                    }
                    catch (Exception ex)
                    {
                        // Could not load the image - probably related to Windows file system permissions.
                        MessageBox.Show("Cannot display the image: " + openFileDialog1.FileNames[i].ToString().Substring(openFileDialog1.FileNames[i].ToString().LastIndexOf('\\'))
                            + ". You may not have permission to read the file, or " +
                            "it may be corrupt.\n\nReported error: " + ex.Message);
                    }
 
                    this.pic_loaded_dell[i].BringToFront();
                    this.pic_loaded_dell[i].BackColor = Color.Transparent;
                    this.pic_loaded_dell[i].Size = new System.Drawing.Size(30, 30);
                    this.pic_loaded_dell[i].Location = new System.Drawing.Point(pic_new[i].Location.X + pic_new[i].Size.Width - pic_loaded_dell[i].Size.Width, pic_new[i].Location.Y + pic_new[i].Size.Height - pic_loaded_dell[i].Size.Height);
                    this.pic_loaded_dell[i].Name = "p_d" + i;
                    this.pic_loaded_dell[i].Image = Image.FromFile(Application.StartupPath + "\\Images\\Dell_fotos.png");
                    this.pic_loaded_dell[i].SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
 
                    this.pic_loaded_dell[i].Click += new EventHandler(Fotos_ADD_Update_Click);
                }
Подскажите как чего можно сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2015, 17:33
Ответы с готовыми решениями:

Недостаточно памяти при загрузке картинки
Сделал вторую форму там я вставляю в уже запущенной проге в две панели BackgroundImage после...

Недостаточно памяти при обрезке изображения из pictureBox
Я беру изображение из pictureBox и вырезаю(точнее клонирую) нужный участок. И потом изменяю...

Недостаточно памяти только при загрузке с внешнего SSD
Здравствуйте. Есть стационарный ПК (i5 + 8Gb + win10pro x64). К нему по USB 3.0 подключен SSD,...

Ограничения по загрузке LoadPicture JPG-картинок в PictureBox
Народ, кто знает какие есть ограничения по загрузке LoadPicture JPG-картинок в PictureBox. Из 50...

6
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
26.06.2015, 09:33 2
Можно не использовать PictureBox, а рисовать сразу на панели
0
15 / 15 / 11
Регистрация: 07.02.2013
Сообщений: 168
26.06.2015, 09:37  [ТС] 3
А что это даст? мне все равно нужно загрузить 100 фоток(сканов) пускай по 10МБ каждая
0
Эксперт .NETАвтор FAQ
10410 / 5140 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
26.06.2015, 10:53 4
decoexire, Оптимизация и проектирование
0
15 / 15 / 11
Регистрация: 07.02.2013
Сообщений: 168
26.06.2015, 12:52  [ТС] 5
Storm23, Как я понял, для уменьшения захламления мне необходимо уменьшить его скажем до размера скажем 200х200, и хранить ссылку на оригинал, который по скажем так клику можно открыть так сказать Full_size
0
Эксперт .NETАвтор FAQ
10410 / 5140 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
26.06.2015, 12:58 6
Цитата Сообщение от decoexire Посмотреть сообщение
Как я понял, для уменьшения захламления мне необходимо уменьшить его скажем до размера скажем 200х200
Нет, вы неправильно поняли. Смысл кода, который я вам привел в том, что картинки подгружаются по мере отрисовки их на экране. Те картинки, что в данный момент видны на экране - подгружаются, а те что не видны - не подгружаются. Поскольку на экране физически не может быть отображено большое число картинок, то и код этот потребляет мало памяти.
0
15 / 15 / 11
Регистрация: 07.02.2013
Сообщений: 168
01.07.2015, 17:14  [ТС] 7
У меня есть сложности с тем как его переписать под мою задачу. Я так понемаю, что мне нужно
1. Получить список всех заружаемых изображений.
2. Исходя из размера Panel отстроить только те которые будут видны. То есть скажем если размер Panel (850х850), а размер Picturebox(pic_new) (200х200) то мне нада отстроить 16 pic_new.
3. Ловить событие SCROLL У пенела и подгружать следующие фото.

Правильно ли я понял? Если да то по какому критерию отлавливать что загружать?
0
01.07.2015, 17:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2015, 17:14
Помогаю со студенческими работами здесь

Вставка нескольких картинок на Panel или PictureBox
Доброе время суток всем! Подскажите как можно прорисовать несколько картинок в ряд на PAnel или...

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

Загрузка картинки в PictureBox и ошибка "недостаточно памяти"
Есть форма на нем pictureBox в него подгружаются картинки. ...

Как мне добиться появление ошибки "Недостаточно памяти" в программе при выделении памяти
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;Student.h&quot; using namespace std; int...

"Недостаточно памяти" при одномоментном выделении большого объёма памяти
Добрый день. Создал MFC приложение, в обработчике батома пишу следующее: long long size =...

Недостаточно памяти при использовании Bitmap->Clone()
Всем привет, помогите найти ошибку в коде: Rectangle cloneRect = Rectangle(0, 0, 512, 512);...

При запуске приложения или при сохранении выдает ошибку, что «недостаточно памяти для продолжения выполнения программы»?
при запуске приложения или при сохранении выдает ошибку, что &quot;недостаточно памяти для продолжения...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru