Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 22.01.2016
Сообщений: 24

Вставка сгенерированных изображений в datagridview (ошибка GDI+)

22.01.2016, 09:42. Показов 1271. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, прошу помочь разобраться

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

проблема: возникает ошибка:
Необработанное исключение типа "System.Runtime.InteropServices.External Exception" в System.Drawing.dll

Дополнительные сведения: В GDI+ возникла ошибка общего вида.
Погуглив понял что надо обнулять графическую пмять через Dispose, но это тоже не помогло. обнулял в цикле после вставки сгенерированного изображения в ячейку датагрида


VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
    Dim img As Image
 
    Private Function drawcode(codeText As String) As Image
        Dim barcode = AxStrokeScribe1
        Dim S As String
        S = codeText ' передаю значение для генерации штрихкода
        barcode.Alphabet = enumAlphabet.CODE128
        barcode.CtlText = S
        If barcode.Error Then
            Microsoft.VisualBasic.MsgBox(barcode.ErrorDescription)
        Else
            img = barcode.GetPictureHandle(enumFormats.EMF, 80, 12) ' !!!!! Ругается тут
        End If
    End Function
 
'генерируем и вставляем в цикле изображения в ячейки датагрид
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        For Each dgwr As DataGridViewRow In DGV.Rows
            drawcode(dgwr.Cells.Item(15).Value)
            dgwr.Cells.Item(14).Value = New Bitmap(img)
        Next
    End Sub
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.01.2016, 09:42
Ответы с готовыми решениями:

В GDI+ произошла ошибка общего вида при сохранении изображений из picturebox'a в файл
Опять не получается. Что посоветуете? Как все таки сделать сохранение изображений из picturebox'a в файл что бы не было ошибок? Вечная...

Изменение размера и сжатие изображений GDI+
Создал программку которая сжимает изображения в указанной папке и изменяет размер, в написании проблем особо не возникло, но при...

Вставка изображений в pictureBox и datagridview из базы данных
Здравствуйте! Ситуацию такая: в базе данных есть таблица с полем nvarchar и в нем хранятся НАЗВАНИЯ картинок(картинка.jpg). Картинки...

10
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
22.01.2016, 19:52
1. Ошибка общего вида, из моей практики с GDI+, возникает зачастую при работе с объектом Graphics.
2. Не уверен, но понимает ли грид формат EMF?
0
 Аватар для Sklifosofsky
1086 / 916 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
22.01.2016, 20:04
Цитата Сообщение от laaagz Посмотреть сообщение
img = barcode.GetPictureHandle(enumFormats.EMF , 80, 12) ' !!!!! Ругается тут
End If
Да тут до грида дело не доходит...
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
22.01.2016, 20:34
Проясните плз, что есть AxStrokeScribe, и откуда он подцепляется. такого типа в VB.net я не увидел пока что. не смею утверждать что он не реализован, просто непонятно откуда он (пространство имен)
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
25.01.2016, 01:12
Разобрался с компонентом)

Попробуйте что-нибудь в виде

VB.NET
1
2
3
Dim asd As Image
asd = New Bitmap(80, 12)
asd=barcode.getpicturehhandle....

Добавлено через 3 часа 30 минут
Признаться честно, все одно не понял...

Скачал компонент. Подцепил. Скопипастил ваш код в форму. Все работает. Никакой ошибки общего вида не возникает.

Не уверен, но возможно дело в том что компонент я прицеплял через ссылки проекта, а потом добавлял его на панель элементов.
0
0 / 0 / 0
Регистрация: 22.01.2016
Сообщений: 24
25.01.2016, 10:02  [ТС]
Winney, спасибо за совет, но не помогло. У меня при запуске дебага первые раза 3-4 тоже не вылетает эта ошибка, каждый раз сиу довольный что все заработало, после н-ой попытки запуска начинает вылетать. Всю голову сломал

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

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        For Each dgwr As DataGridViewRow In DGV.Rows
            Dim b = New BarcodeLib.Barcode
            b.Encode(TYPE.CODE128, dgwr.Cells.Item(15).Value.ToString, 500, 100)
            Dim b_img As Image
            Dim imgname As String = "image_"
            b_img = New Bitmap(500, 100)
            b_img = b.EncodedImage
            b_img.Save("c:\Project\PrintBarPL\PrintBarPL\bin\Debug\Barcode" & dgwr.Cells.Item(15).Value & ".code128")
' ^^^^^^^^^^^^^^^^^^^^
' ругается теперь на этой строке. Ошибка та же.
'-------------------------------------
            b_img.Dispose()
            GC.Collect()
            imgname = "c:\Project\PrintBarPL\PrintBarPL\bin\Debug\Barcode" & dgwr.Cells.Item(15).Value & ".code128"
            dgwr.Cells.Item(14).Value = New Bitmap(imgname)
        Next
    End Sub
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
25.01.2016, 10:16
laaagz, у вас в имени пути после Barcode прошушен слэш.
0
0 / 0 / 0
Регистрация: 22.01.2016
Сообщений: 24
25.01.2016, 13:17  [ТС]
Yury Komar, не пропущен, проверил...видимо копипаст как-то плохо прошел(слешы съедаются при фаст едите на форуме при обработке бб-кода). Спасибо за поправку. Ошибка GDI+

Такая конструкция тоже не работает:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        For Each dgwr As DataGridViewRow In DGV.Rows
            Dim b = New BarcodeLib.Barcode
            b.Encode(TYPE.CODE128, dgwr.Cells.Item(15).Value.ToString, 500, 100)
            Dim imgname As String = "image_"
            Graphics.FromImage(b.EncodedImage)
            b.EncodedImage.Save("c:\Project\PrintBarPL\PrintBarPL\bin\Debug\Barcode" & dgwr.Cells.Item(15).Value & ".code128")
            b.EncodedImage.Dispose()
            GC.Collect()
            imgname = "c:\Project\PrintBarPL\PrintBarPL\bin\Debug\Barcode" & dgwr.Cells.Item(15).Value & ".code128"
            dgwr.Cells.Item(14).Value = New Bitmap(imgname)
        Next
    End Sub
Добавлено через 2 часа 50 минут
Проблема частично решена.
Дело в том что ошибка возникает при попытке сделать запись в уже существующий файл.
Ошибку выдавало когда файл с таким же именем уже существовал.
Решилось созданием уникального ИД в имени изображения.

Осталось понять как после создания файла сделать так чтобы его "отпустило".
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
27.01.2016, 19:50
М... а зачем сохранять изображение на диск то??? Почему сразу не вставить созданное изображение (программно) в грид?
2
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
27.01.2016, 20:06
Winney, тоже верно )
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
27.01.2016, 20:30
laaagz, и мне кажется, ели еще убрать Dispose для EncodedImage, жизнь может наладиться) А может и нет) Ну для отладки уберите ка всех сборщиков мусора и освободителей ресурсов)))

P.S.: У колонки грида должен быть тип DataGridViewImageColumn.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.01.2016, 20:30
Помогаю со студенческими работами здесь

Вывод в браузер сгенерированных изображений при кодировке скрипта ютф-8
Допустим, я генерирую в php-скрипте какое-то изображение с помощью GD и вывожу его в браузер, например, так: header('Content-Type:...

gdi+ и конейнер для хранения изображений
Хочу реализовать средствами winapi и gdi+ следующий функционал: 1. считывается изображение с диска любого формата, поддерживаемого gdi+ ...

Есть ли в WPF полноценная замена GDI+? Чтобы можно было всё, что можно в GDI+? Просто думаю углубляться в работу с изображениями в WPF или GDI.
Ну собственно весь вопрос в заголовке темы.

Вставка изображений
Господа знатоки, кто скажет, отчего Access 2010 при выводе формы либо отчета, вставленную картинку отображает в виде значка? Как заставить...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru