Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
3 / 3 / 0
Регистрация: 13.09.2010
Сообщений: 46

Загрузка графических файлов из ресурсов

19.01.2012, 00:18. Показов 2162. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть один из способов загрузки файлов изображений из ресурсов при помощи библиотеки GDI+
Загружаешь файл в ресурсы.
В файле "rsrc.rc" делаешь запись:

Assembler
1
2001 GIF "a.gif"
Инициализация:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.data
gifType    db "GIF", 0
 
.data?
gifImage    dd ?
hbuffer     dd ?
pIStream    dd ?
rcRes       dd ?
hResData    dd ?
sizeOfRes   dd ?
hBitmap     dd ?
hHeap       dd ?
hIcon       dd ?
Static      dd ?
hIStream    dd ?
Код:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
invoke  FindResource, hInstance, 2001, addr gifType
mov rcRes, eax
invoke  LoadResource, hInstance, rcRes
mov hResData, eax
invoke  SizeofResource, hInstance, rcRes
mov sizeOfRes, eax
invoke  GetProcessHeap
mov hHeap,eax
invoke  HeapAlloc,hHeap,0,sizeOfRes
mov hbuffer, eax
invoke  RtlMoveMemory, hbuffer, hResData, sizeOfRes
invoke  CreateStreamOnHGlobal, hbuffer, FALSE, addr pIStream
invoke  GdipCreateBitmapFromStream, pIStream,addr hBitmap
invoke  GetHGlobalFromStream, pIStream, addr hIStream
invoke  GlobalFree, hIStream
invoke  HeapFree,hHeap,0,hbuffer
В итоге в переменную hBitmap загружается хендл.
Этот метод загрузки битмапа из потока работает нормально
со всеми популярными файлами (Jpg, Gif, Png, Bmp).
Только если захотите обьединить эти функции в одну функцию
то переменные лучше сделать глобальные а то с локальными
иногда будет работать не корректно.
Вроде бы всё хорошо всё работает но несколько смущает слишком
большой набор функций для такой операции.
Интересно что в GDI+ есть ещё одна функция

GdipCreateBitmapFromResource

описание функции:
1 - Дескриптор экземпляра модуля.
2 - Указатель на завершающуюся нулем Unicode строку, которая определяет
путь и имя ресурса растрового изображения должны быть загружены.
Кроме того, этот параметр может состоять из идентификатора ресурса
в младшем слове и ноль в старшем слове.
3 - Указатель на DWORD переменную, которая указатель на Bitmap объекта.

По идее вроде бы должно работать так:

Assembler
1
2
invoke MultiByteToWideChar,0,0,addr gifType,-1,addr Unicod,addr Char
invoke GdipCreateBitmapFromResource,hInstance,addr Unicod,addr hBitmap
Но к сожелению не работает.
И вместо "addr gifType" ставил просто "2001" всё равно
функция не срабатывает и в переменной hBitmap чистый ноль.
Честно говоря не пойму почему.
Подозреваю только что всё таки со вторым параметром у меня ошибка.

В поиске нашёл один сайт где показаны как работают
некоторые функции GDI+
И в частности эта функция GdipCreateBitmapFromResource

 Комментарий модератора 
ссылки на сторонние форумы запрещены


Там чисто показано что эта функция (всего одна) из ресурсов загружает битмам без проблем.
Я подумал что именно эта функция не хочет работать с таким форматом как Gif
и попробывал загрузить в ресурсы формат Bmp но результат тот же в hBitmap чистый ноль.
Честно говоря не понятно. Ведь если почитать описание этих функций

invoke GdipCreateBitmapFromStream, pIStream,addr hBitmap
и
invoke GdipCreateBitmapFromResource,hInstance,a ddr Unicod,addr hBitmap

У всех в переменную hBitmap загружается битмап картинки, только одна берёт данные из потока
а другая (могу конечно ошибатся) работает вроде бы напрямую с ресурсами.

Может кто знает в чём проблемма?
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.01.2012, 00:18
Ответы с готовыми решениями:

Загрузка PNG из ресурсов.
Подскажите как загрузить картинку PNG/JPG поверх окна? Лучше из секции ресурсов. Я встречал пример даже с альфаканалом, но всюду bmp! ...

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

J2ME загрузка файлов ресурсов
Помогите плиз. Пробую писать мидлет в EclipseMe по книжке (должен отображать картинку): import javax.microedition.midlet.MIDlet; ...

1
4190 / 1838 / 221
Регистрация: 06.10.2010
Сообщений: 4,124
19.01.2012, 22:31
Не обязательно использовать ресурсы можно просто прилинковать файл к программе (в FASM - директива file)
https://www.cyberforum.ru/post1344193.html

Добавлено через 2 минуты
Хотя нет - всё равно длинновато

Добавлено через 29 минут
попробывал загрузить в ресурсы формат Bmp но результат тот же в hBitmap чистый ноль.
У меня нормально bmp-шки загружает, а gif не хочет. Пробовал даже указать gif`у тип BITMAP. Кстати функция нормально воспринимает как unicode-строки так и id ресурсов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.01.2012, 22:31
Помогаю со студенческими работами здесь

Загрузка файлов в ListBox из папки ресурсов
Доброго всем времени суток! В папке ресурсов хронятся несколько звуковых файлов. Как имена этих файлов поместить в листбокс?

Оптимизация графических ресурсов
День добрый. Те, кто занимался оптимизацией графики, а именно уменьшением Draw Call'ов и подгрузкой текстур, прошу помощь. Цель -...

Использование графических ресурсов в приложениях Win32
Помогите исправить ошибку:error C2664: LoadCursorW: невозможно преобразовать параметр 2 из "int" в "LPCWSTR" 1> ...

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

Софт: Редактор Графических ресурсов для паскаля - Pascal BitMap Editor (официальная тема:)
Поисковые тэги: Pascal BitMap Editor, программа для работы с Pascal BitMap, прога для работы с графикой в паскаль, создание ресурсов для...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
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