如何从base64创建HICON?

How to create a HICON from base64?

本文关键字:HICON 创建 base64      更新时间:2024-09-27

我正在将一张图片从base64字符串转换为注册新类时可以工作的HICON

WNDCLASSEX wc{};
wc.hIcon = < here >;

我在这里得到了base64_decode()函数:base64.cpp

#include <windows.h> // GDI includes.
#include <objidl.h>
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment (lib,"Gdiplus.lib")

Gdiplus::GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

std::string base64 = "......";
std::string decodedImage = base64_decode(base64);
DWORD imageSize = decodedImage.length();
HGLOBAL hMem = ::GlobalAlloc(GMEM_MOVEABLE, imageSize);
LPVOID pImage = ::GlobalLock(hMem);
memcpy(pImage, decodedImage.c_str(), imageSize);
IStream* pStream = NULL;
::CreateStreamOnHGlobal(hMem, FALSE, &pStream);
Gdiplus::Image image(pStream);
int wd = image.GetWidth();
int hgt = image.GetHeight();
auto format = image.GetPixelFormat();
Bitmap* bmp = new Bitmap(wd, hgt, format);
auto gg = std::unique_ptr<Graphics>(Graphics::FromImage(bmp));
gg->Clear(Color::Transparent);
gg->DrawImage(image, 0, 0, wd, hgt);
...

我找不到从Image获取HICON的方法,所以我试图将Image转换为Bitmap

我在行上收到这两个错误gg->DrawImage(image, 0, 0, wd, hgt);

C2664 'Gdiplus::Status

Gdiplus::Graphics::D rawImage(Gdiplus::Image *,Gdiplus::REAL,Gdiplus::REAL,Gdiplus::REAL,Gdiplus::REAL)':无法将参数 1 从 'Gdiplus::Image' 转换为 'Gdiplus::Image *'E0304 没有重载函数"Gdiplus::Graphics::D rawImage"的实例与参数列表匹配

无法将参数 1 从 'Gdiplus::Image' 转换为 'Gdiplus::Image *'

DrawImage()需要一个指向Image对象的指针,但您却将实际对象传递给它。

更改此语句:

gg->DrawImage(image, 0, 0, wd, hgt);

对此:

gg->DrawImage(&image, 0, 0, wd, hgt); // <-- note the added '&' ...