Member 13495762 Ответов: 2

Как загрузить png-файл в picture control


У меня есть элемент управления picture на моей стартовой странице в visual studio. У меня также есть изображение png в моем ресурсе.
Но это проблема, чтобы загрузить его. Возможно ли это, или мы можем только загрузить растровое изображение?

Что я уже пробовал:

Я хотел загрузить картинку из свойств. Но так как это не bmp, то мой файл png его не видно.

Я тоже пытался
m_pictureLogo.SetBitmap(MTOFileSystem::loadImage(Global::getPhotosDir() + "\\" + L"IDB_BITMAP_LOGO_NEW.png"));

но это тоже не работает.....

Что же делать?

2 Ответов

Рейтинг:
1

Jochen Arndt

Вы могли бы использовать Класс CPngImage[^] из МФЦ пакета:

#include <afxtoolbarimages.h>

CPngImage image;
image.Load(IDB_BITMAP_LOGO_NEW, AfxGetInstanceHandle());
// EDIT: Must cast here
//m_pictureLogo.SetBitmap(image.Detach());
m_pictureLogo.SetBitmap((HBITMAP)image.Detach());


Member 13495762

Привет, кажется, все хорошо. где я должен поместить последние две строки в файл cpp?
изображение.Load(IDB_BITMAP_LOGO_NEW, AfxGetInstanceHandle());
m_pictureLogo.SetBitmap(изображение.Отсоединить());
Я положил его в DoDataExchange, в последней строке кода есть ошибка
m_pictureLogo.SetBitmap(изображение.Detach()); ->аргумент типа "HGIOBJ" несовместим с параметром типа "HBITMAP" ....

Jochen Arndt

Просто приведите возвращаемое значение (я обновлю свое решение):
m_pictureLogo.SetBitmap((HBITMAP)изображение.Отсоединить());

Я бы поместил код в функцию Init родительского окна (CDialog: OnInitDialog, CView: OnInitialUpdate).

Member 13495762

Спасибо , я постараюсь дать вам знать. Мне нужны png файлы для добавления потому что мне нужна прозрачность

Jochen Arndt

Но вы знаете, что PNG преобразуется в растровое изображение, которое затем отображается элементом управления, а элемент управления CStatic picture не поддерживает прозрачность?

Member 13495762

Я вижу...так он мне не поможет. Мне нужно загрузить png-файлы (которые имеют прозрачность) в мои блоки управления изображениями на нашей стартовой странице вместо bmp-файла...

Jochen Arndt

Растровые файлы также могут иметь прозрачность (одно значение цвета определяется как прозрачный цвет, и значение RGB этого цвета должно быть передано функциям, поддерживающим прозрачные растровые изображения).

Но управление изображениями на основе CStatic их не поддерживает. Но вы можете, например, нарисовать непосредственно окно с помощью BitBlt.

См., например: https://www.codeproject.com/Articles/703/Drawing-Transparent-Bitmap-with-ease-with-on-the-f

Member 13495762

Это довольно трудно использовать для меня. Можно ли как-то использовать метод onPaint() для рисования этого png на элементе управления изображением?

Jochen Arndt

Это вполне возможно. Читайте о нарисованных владельцами / пользователями элементах управления. Но это продвинутая тема, которая требует изучения (много чтения).