Как я загружаю png ресурс в a CBitMap
? Когда я пробую это, это, кажется, не работает:
CImage image;
image.LoadFromResource(AfxGetInstanceHandle(), IDB_PNG1);
bitmap.Attach(image.Detach());
Это дает мне ошибочный тип ресурса, не найденный. Там какой-либо другой путь состоит в том, чтобы загрузить ресурс PNG?
LoadFromResource использует LoadImage внутри, он не поддерживает PNG, когда я в последний раз пытался, несмотря на то, что говорится в документации. Вы можете связать с CxImage (посмотрите код проекта), но это большой объем работы и небольшая реальная польза.
В конце концов я забыл о PNG, использовал AlphaConv для преобразования PNG в 32-битные растровые изображения Windows и использовал с ними CImage. Дополнительным преимуществом является то, что вы можете использовать их с CBitmapButton и т. Д. В MFC без каких-либо преобразований.
Другой способ обойти это - извлечь содержимое ресурса во временный файл, а затем использовать CImage :: Load для его чтения оттуда. Если бы я заметил, что вы делаете это в одной из моих кодовых баз, я бы ударил вас по лицу;)
Используйте такую библиотеку, как 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 для графики в мои программы, и это очень упрощает вещи.