gpt4 book ai didi

c++ - 在 C++ 中将 vector 转换为 HBITMAP

转载 作者:行者123 更新时间:2023-11-30 05:31:43 27 4
gpt4 key购买 nike

我已经使用了代码 here将 PNG 图像加载到 BMP 原始 vector 中 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")


编辑

或者在 WM_PAINT 中使用 Gdiplus::Image

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;
}

关于c++ - 在 C++ 中将 vector <unsigned char> 转换为 HBITMAP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35477145/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com