Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 1
Регистрация: 01.03.2012
Сообщений: 19

Ошибка работе с памятью при растягивании формы

05.08.2018, 10:47. Показов 683. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть форма с несколькими кнопками. Все кнопки обрабатываются нормально кроме этой:
Кликните здесь для просмотра всего текста

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
private void Rotate_cw_Click(object sender, EventArgs e)
        {
            Bitmap raw = new Bitmap("test.jpg");
            BitmapData rawData = raw.LockBits(new Rectangle(0, 0, raw.Width, raw.Height), ImageLockMode.ReadWrite, raw.PixelFormat);
            byte[] rawmsv = new byte[rawData.Height * rawData.Stride];
            Marshal.Copy(rawData.Scan0, rawmsv, 0, rawmsv.Length);
            raw.UnlockBits(rawData);
 
            Bitmap bmp = new Bitmap(raw.Height, raw.Width, raw.PixelFormat);
            BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat);
            byte[] msv = new byte[bmpData.Stride * bmpData.Height];
            Marshal.Copy(bmpData.Scan0, msv, 0, msv.Length);
            bmp.UnlockBits(bmpData);
 
            for (int i = 0; i < bmp.Height; i++)
            {
                for (int j = 0; j < bmp.Width; j++)
                {
                    msv[bmpData.Stride * i + 3 * j + 0] = rawmsv[rawData.Stride * (raw.Height - j - 1) + 3 * i + 0];
                    msv[bmpData.Stride * i + 3 * j + 1] = rawmsv[rawData.Stride * (raw.Height - j - 1) + 3 * i + 1];
                    msv[bmpData.Stride * i + 3 * j + 2] = rawmsv[rawData.Stride * (raw.Height - j - 1) + 3 * i + 2];
                }
            }
            pictureBox1.Image = new Bitmap(bmp.Width, bmp.Height, bmpData.Stride, bmp.PixelFormat, Marshal.UnsafeAddrOfPinnedArrayElement(msv, 0));
        }

После того, как событие обработается, попытка масштабировать форму за уголок или использовать ползунки приводит к
Кликните здесь для просмотра всего текста

************** Текст исключения **************
System.AccessViolationException: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
в System.Drawing.SafeNativeMethods.Gdip.Gd ipDrawImageRectI(HandleRef graphics, HandleRef image, Int32 x, Int32 y, Int32 width, Int32 height)
в System.Drawing.Graphics.DrawImage(Image image, Int32 x, Int32 y, Int32 width, Int32 height)
в System.Drawing.Graphics.DrawImage(Image image, Rectangle rect)
в System.Windows.Forms.PictureBox.OnPaint( PaintEventArgs pe)
в System.Windows.Forms.Control.PaintWithEr rorHandling(PaintEventArgs e, Int16 layer)
в System.Windows.Forms.Control.WmPaint(Mes sage& m)
в System.Windows.Forms.Control.WndProc(Mes sage& m)
в System.Windows.Forms.Control.ControlNati veWindow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callba ck(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Загруженные сборки **************
mscorlib
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.8933 (WinRelRS4.050727-8900)
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
----------------------------------------
pngEditor
Версия сборки: 1.0.0.0
Версия Win32: 1.0.0.0
CodeBase: file:///L:/Программирование/c%23/Работы%20на%20c%23/pngEditor/pngEditor/bin/Debug/pngEditor.exe
----------------------------------------
System.Windows.Forms
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.8922 (WinRelRS4.050727-8900)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.8922 (WinRelRS4.050727-8900)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.8922 (WinRelRS4.050727-8900)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
mscorlib.resources
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.8933 (WinRelRS4.050727-8900)
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
----------------------------------------
System.Windows.Forms.resources
Версия сборки: 2.0.0.0
Версия Win32: 2.0.50727.8922 (WinRelRS4.050727-8900)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_ru_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------

Клики по другим кнопкам к ошибке не приводят, например после этой кнопки сбоев нет
Кликните здесь для просмотра всего текста
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
private void Sepia_Click(object sender, EventArgs e)
        {
            Bitmap img = new Bitmap("test.jpg");
            int Hw = int.Parse(BotRightY.Text) - int.Parse(TopLeftY.Text);
            int Ww = int.Parse(BotRightX.Text) - int.Parse(TopLeftX.Text);
            BitmapData bitmapData = img.LockBits(new Rectangle(int.Parse(TopLeftX.Text), int.Parse(TopLeftY.Text), Ww, Hw),
                                                    ImageLockMode.ReadWrite, img.PixelFormat);
            byte[] msv = new byte[bitmapData.Stride * bitmapData.Height];
            Marshal.Copy(bitmapData.Scan0, msv, 0, msv.Length);
            img.UnlockBits(bitmapData);
            byte R = 0;
            byte G = 0;
            byte B = 0;
            int Rx, Gy, Bz;
            for (int i = 0; i < Hw; i++)
                for (int j = 0; j < Ww; j++)
                {
                    R = msv[bitmapData.Stride * i + 3 * j + 2];
                    G = msv[bitmapData.Stride * i + 3 * j + 1];
                    B = msv[bitmapData.Stride * i + 3 * j + 0];
                    Rx = (int)((R * 0.393F) + (G * 0.769F) + (B * 0.189F));
                    if (Rx > 255) Rx = 255;
                    Gy = (int)((R * 0.349F) + (G * 0.686F) + (B * 0.168F));
                    if (Gy > 255) Gy = 255;
                    Bz = (int)((R * 0.272F) + (G * 0.534F) + (B * 0.131F));
                    if (Bz > 255) Bz = 255;
                    msv[bitmapData.Stride * i + 3 * j + 2] = (byte)Rx;
                    msv[bitmapData.Stride * i + 3 * j + 1] = (byte)Gy;
                    msv[bitmapData.Stride * i + 3 * j + 0] = (byte)Bz;
                }
            pictureBox1.Image = new Bitmap(Ww, Hw, bitmapData.Stride, img.PixelFormat, Marshal.UnsafeAddrOfPinnedArrayElement(msv, 0));
        }

Во вложениях свойства формы(1-2) и pictureBox`а. Ошибки при компиляции и на WinXP .Net 3.5, и на Win 10 .Net 4.6.1.
Миниатюры
Ошибка работе с памятью при растягивании формы   Ошибка работе с памятью при растягивании формы   Ошибка работе с памятью при растягивании формы  

Ошибка работе с памятью при растягивании формы  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.08.2018, 10:47
Ответы с готовыми решениями:

Ошибка при работе с памятью
Написан следующий код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;cstdlib&gt; ...

Ошибка при работе с памятью
Если ввести например 6, 0, чтобы выбросить исключение. То по завершение программы выскакивает ошибка. В чём может быть дело? Так что то про...

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.08.2018, 10:47
Помогаю со студенческими работами здесь

Ошибка с памятью при работе класса и map
В общем есть класс тест class test { public: test(void); ~test(void); test(const int&amp;); private:

Ошибка в коде при работе с динамической памятью
Не могу понят что не так ? При вводе в динамический массив А последовательность &quot;61 3 2 0 -2 -25 -61 -70&quot; программа крашится...

Ошибка с памятью при работе с двумерными массивами.
{ int i, j, c, kol; n=StrToInt(Edit1-&gt;Text); m=StrToInt(Edit2-&gt;Text); for(i=0; i&lt;n; i++) { for(j=0; j&lt;m; j++)...

Ошибка с памятью при работе с динамическим двумерным массивом
Вроде всё правильно, но в ходе работы программа выдаёт ошибку(на скрине). Дело в двумерном динамическом массиве. Ниже код с функцией, куда...

Ошибка при работе с динамической памятью - 'Invalid pointer operatoion'
Столкнулся с такой проблемой - код исполняется правильно, но при закрытие программы вываливается ошибка(скрин прилогается). Я нашёл...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru