Загрузка JPEG из ресурсов программы

Модераторы: Romeo, Hawk, Absurd, WinMain, DeeJayC

Ответить
Аватара пользователя
Decoder
Сообщения: 301
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

Загрузка JPEG из ресурсов программы

Сообщение Decoder » 05 мар 2008, 14:58

Для графических ресурсов типа BITMAP, ICON, CURSOR есть соответствующие функции загрузки: LoadBitmap(), LoadIcon(), LoadCursor().
А я хочу включить в ресурсы программы изображения в формате JPG. Каким образом мне их потом загрузить оттуда и получить хэндл изображения?

Аватара пользователя
WinMain
Сообщения: 912
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Re: Загрузка JPEG из ресурсов программы

Сообщение WinMain » 05 мар 2008, 16:07

Я как-то делал универсальный загрузчик изображений, который позволяет брать картинку разных форматов и из разных источников: из файла, из оперативной памяти, из ресурсов, а так же из интернета.
Мой пример сделан с помощью библиотеки WTL (Windows Template Library). Так что тебе нужно будет скачать эту библиотеку и добавить её в Visual C++. Или можно просто переделать этот пример на MFC.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Приглашаю на свой сайт http://winmain.org

Аватара пользователя
Decoder
Сообщения: 301
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

Re: Загрузка JPEG из ресурсов программы

Сообщение Decoder » 06 мар 2008, 00:43

WinMainище, ну ты молодец! Очень пригодился твой загрузчик изображений.

Аватара пользователя
WinMain
Сообщения: 912
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Re: Загрузка JPEG из ресурсов программы

Сообщение WinMain » 06 мар 2008, 12:28

Спасибо за комплимент. :-)
Приглашаю на свой сайт http://winmain.org

Аватара пользователя
Decoder
Сообщения: 301
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

Re: Загрузка JPEG из ресурсов программы

Сообщение Decoder » 06 мар 2008, 12:44

Ещё такой вопрос: если мне нужно привязать изображение к окну диалога в виде статического элемента, то мне значит нужно делать сабкласс для этого элемента и в нём рисовать моё изображение? Или как-то иначе можно это сделать?

BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

Re: Загрузка JPEG из ресурсов программы

Сообщение BBB » 06 мар 2008, 13:08

WinMain писал(а):Я как-то делал универсальный загрузчик изображений, который позволяет брать картинку разных форматов и из разных источников: из файла, из оперативной памяти, из ресурсов, а так же из интернета.
Тут я опять попиарю библиотеку XnView GFL SDK :)
Тоже многое чего умеет. Поддерживает кучу графических форматов (в доке во вступлении указано, что "более 100"). Прилагается доступ из C++, VB, Delphi.

Аватара пользователя
WinMain
Сообщения: 912
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Re: Загрузка JPEG из ресурсов программы

Сообщение WinMain » 06 мар 2008, 13:21

Decoder писал(а):Ещё такой вопрос: если мне нужно привязать изображение к окну диалога в виде статического элемента, то мне значит нужно делать сабкласс для этого элемента и в нём рисовать моё изображение? Или как-то иначе можно это сделать?
Вовсе необязательно делать сабкласс. Можно обычному элементу STATIC в стиле SS_BITMAP назначить свою картинку. Для этого нужно вызвать метод CStatic::SetBitmap(). Чтобы получить HBITMAP из OLE-объекта IPicture, нужно вызвать метод IPicture::get_Handle() и преобразовать его в HBITMAP обычным приведением типов.
Приглашаю на свой сайт http://winmain.org

Аватара пользователя
Decoder
Сообщения: 301
Зарегистрирован: 19 фев 2008, 23:11
Откуда: Moscow

Re: Загрузка JPEG из ресурсов программы

Сообщение Decoder » 06 мар 2008, 14:18

Примечательно, что BITMAP или иконку можно визуально связать с элементом STATIC прямо в редакторе ресурсов. А вот с JPEG-изображением так не получается, приходится специальный код писать. Как-нибудь можно визуализировать этот процесс?

Аватара пользователя
WinMain
Сообщения: 912
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Re: Загрузка JPEG из ресурсов программы

Сообщение WinMain » 06 мар 2008, 14:39

Можно конечно. Только для этого вместо элемента STATIC нужно использовать соответствующий ActiveX-компонент. Тогда в свойствах этого элемента визуально можно указать исходный файл с изображением. Это изображение будет загружено и записано в файл ресурсов. При запуске программы во время создания окна диалога изображение автоматически будет загружено из ресурсов программы и отображено на окне диалога. В качестве такого ActiveX-компонента можно использовать Microsoft Forms 2.0 Image, который входит в состав Microsoft Office (VBA). Если тебе нужно будет перенести программу на компьютер, где не установлен Microsoft Office, то тебе придётся вручную скопировать в системный каталог Windows модули FM20.DLL и FM20ENU.DLL, при этом FM20.DLL нужно зарегистрировать как СОМ-сервер с помощью утилиты regsvr32.exe
Приглашаю на свой сайт http://winmain.org

Ответить