Не удается получить дескриптор изображения из растрового изображения в ресурсах при использовании «LoadImageA ()» и не может понять, почему - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь загрузить ресурс изображения с помощью функции LoadImageA(), но он не работает, и я не понимаю, почему.

Вот немного моего кода:

bool isRessource = IS_INTRESOURCE(107);

// Load the resource to the HGLOBAL.
HGLOBAL imageResDataHandle = LoadImageA(
    NULL,
    MAKEINTRESOURCEA(107),
    IMAGE_BITMAP,
    0,
    0,
    LR_SHARED
    );
HRESULT hr = (imageResDataHandle ? S_OK : E_FAIL);

Изображение, которое я хочу загрузить, представляет собой растровое изображение, сохраненное в ресурсах и представленное как таковое в resources.h:

#define IDB_BITMAP1                     107

Когда я выполняю код, isRessource равен true, все же hr равно E_FAIL.

Есть идеи, почему это происходит? Я использую Visual Studio 2019, и я сделал изображение, используя Gimp.

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

После создания того же изображения с тем же форматом в другом приложении (я использовал «Krita») и его импорта снова, изображение, наконец, загружается с тем же кодом (я только изменил ссылку на ресурс). Я предполагаю, что все типы растровых изображений, созданных из Gimp, не будут работать в Visual Studio (я пробовал большинство форматов растровых изображений из Gimp).

0 голосов
/ 13 апреля 2020

Первая поисковая ссылка с LoadImage gimp в качестве ключевого слова достаточно для ответа на этот вопрос.

Это некоторая полезная информация:

Растровое изображение экспортировано По GIMP сломан заголовок. В частности, кажется, что код не записывает маски RGBA, которые AFAIK не являются обязательными в BITMAPV5HEADER. Это смещает и изменяет размер всего расширенного заголовка, случайно делая его похожим на BITMAPV4HEADER, что объясняет, почему большинство программ по-прежнему открывают его нормально. Не проводя никакого тестирования, я бы предположил, что LoadImage () более требователен к значениям в этом расширенном заголовке; возврат NULL - это то, как он указывает на ошибку.

Кстати, когда вы импортируете растровое изображение, система не напоминает вам, что формат изображения неизвестен?

Как:

enter image description here

После тестирования используйте LoadImage для загрузки такого изображения, которое вернет NULL, и GetLastError также вернет 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...