Я использовал код Вот загрузить изображение PNG в необработанный вектор BMP std::vector <unsigned char>
, Теперь мне нужно применить это изображение в качестве фона для окна WinAPI, и я не знаю, как я могу преобразовать его в HBITMAP
, Может быть, кто-то делал это раньше или, может быть, я мог бы использовать другой формат или тип переменной
Вы можете использовать Gdiplus с самого начала, чтобы открыть файл PNG и получить HBITMAP
справиться
//initialize Gdiplus:
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
HBITMAP hbitmap;
HBRUSH hbrush;
Gdiplus::Bitmap *bmp = Gdiplus::Bitmap::FromFile(L"filename.png");
bmp->GetHBITMAP(0, &hbitmap);
hbrush = CreatePatternBrush(hbitmap);
//register classname and assign background brush
WNDCLASSEX wcex;
...
wcex.hbrBackground = hbrush;
CreateWindow...
Очистка:
DeleteObject(hbrush);
DeleteObject(hbitmap);
delete bmp;
Gdiplus::GdiplusShutdown(gdiplusToken);
Вам необходимо включить «gdiplus.h» и ссылку на библиотеку «gdiplus.lib». Заголовочные файлы должны быть доступны по умолчанию.
В Visual Studio вы можете создать ссылку на Gdiplus следующим образом:
#pragma comment( lib, "Gdiplus.lib")
редактировать
или использовать Gdiplus::Image
в WM_PAINT
Gdiplus::Image *image = Gdiplus::Image::FromFile(L"filename.png");
WM_PAINT
в оконной процедуре:
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
if (image)
{
RECT rc;
GetClientRect(hwnd, &rc);
Gdiplus::Graphics g(hdc);
g.DrawImage(image, Gdiplus::Rect(0, 0, rc.right, rc.bottom));
}
EndPaint(hwnd, &ps);
return 0;
}
Других решений пока нет …