Загрузите png ресурс в CBitMap

Как я загружаю png ресурс в a CBitMap? Когда я пробую это, это, кажется, не работает:

CImage image;
image.LoadFromResource(AfxGetInstanceHandle(), IDB_PNG1);
bitmap.Attach(image.Detach());

Это дает мне ошибочный тип ресурса, не найденный. Там какой-либо другой путь состоит в том, чтобы загрузить ресурс PNG?

9
задан Micha Wiedenmann 3 July 2019 в 09:02
поделиться

2 ответа

LoadFromResource использует LoadImage внутри, он не поддерживает PNG, когда я в последний раз пытался, несмотря на то, что говорится в документации. Вы можете связать с CxImage (посмотрите код проекта), но это большой объем работы и небольшая реальная польза.

В конце концов я забыл о PNG, использовал AlphaConv для преобразования PNG в 32-битные растровые изображения Windows и использовал с ними CImage. Дополнительным преимуществом является то, что вы можете использовать их с CBitmapButton и т. Д. В MFC без каких-либо преобразований.

Другой способ обойти это - извлечь содержимое ресурса во временный файл, а затем использовать CImage :: Load для его чтения оттуда. Если бы я заметил, что вы делаете это в одной из моих кодовых баз, я бы ударил вас по лицу;)

5
ответ дан 4 December 2019 в 08:00
поделиться

Используйте такую ​​библиотеку, как CxImage ( http://www.xdp.it/cximage.htm ), чтобы сделать всю тяжелую работу за вас. Код становится таким же простым, как: -

CxImage image;
if (image.LoadResource(<resource_instance_handle>, <resource_id>, CXIMAGETYPE_PNG))
{
    HBITMAP hbmp = image.CreateHBITMAP();
    ... do something with hbmp ...
}

(обратите внимание, что я пишу этот код из памяти - вам может потребоваться немного подправить его, чтобы заставить его работать!)

Я часто использую CxImage для графики в мои программы, и это очень упрощает вещи.

1
ответ дан 4 December 2019 в 08:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: