Я ищу способ встроить изображение в библиотеку (только для Windows). Я не хочу использовать «традиционный» способ помещения его в ресурсы (из-за особых обстоятельств, из-за которых не так удобно возиться с дескриптором ресурса.
В идеале должно быть что-то вроде файлов xpm: «текстовое» представление изображения, которое помещается в массив c и который некоторый код преобразуется в растровое изображение в памяти, которое затем можно каким-то образом загрузить в HIMAGE или HICON. Изображения, которые я хочу встроить, представляют собой 32-битные растровые изображения (bmp). Есть идеи? Я использую MFC, поэтому мне подойдет библиотека MFC, но, конечно, я могу использовать и библиотеку, которая не использует MFC. Спасибо.





Погуглите утилиту bin2c (что-то вроде http://stud3.tuwien.ac.at/~e0025274/bin2c/bin2c.c). Он берет двоичное представление файла и выводит исходный файл C, который включает в себя массив байтов, инициализированных этими данными.
Просто свяжите файл, и ваше изображение останется в памяти.
Использование такого рода инструментов действительно распространено во встроенных системах, где такие вещи, как «ресурсы» и даже файлы, могут не существовать.
Сработало отлично, спасибо. Для полноты: для загрузки данных из памяти я использовал код из ragestorm.net/blogs/?p=9, который вращается вокруг LookupIconIdFromDirectoryEx () и CreateIconFromResourceEx () (для HICON).
Я бы предложил вместо этого использовать xxd -i myimage.png > myimage.h. Обратите внимание, что xdd - это утилита Linux.
Канитель может экспортировать в файлы C. Я думаю, это был бы самый простой способ сделать это.
Приложение с открытым исходным кодом Hexy создано специально для этого. Он работает в Windows и Linux. https://github.com/tristan2468/Hexy
Он отличается от bin2c? Есть где-нибудь бинарник?
Бинарные файлы находятся по этой ссылке на GitHub, справа есть кнопка «Загрузки». Hexy основан на графическом интерфейсе, поэтому вы просто перетаскиваете на него все файлы, которые хотите преобразовать.
В * nix
xxdэто ответ, stackoverflow.com/a/17270219/1163019