从 C++ 中的字节数组创建 HICON?

Posted

技术标签:

【中文标题】从 C++ 中的字节数组创建 HICON?【英文标题】:Creating an HICON from a byte array in C++? 【发布时间】:2009-12-17 15:09:23 【问题描述】:

我在内存中有一个 PNG 编码的图标作为字节数组。从这个字节数组创建 HICON 对象的推荐方法是什么?


如果您知道没有 ATL 或 GDI+ 的解决方案,您将获得假想的奖励积分... :)

【问题讨论】:

从中创建一个流,然后从流中加载一个图标... 如何从流中获取 HICON? 【参考方案1】:
HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, dataSize);
LPVOID pImage = GlobalLock(hMem);
memcpy(pImage, pngData, dataSize);
GlobalUnlock(hMem);

ATL::CComPtr<IStream> pStream;
CreateStreamOnHGlobal(hMem, TRUE, &pStream);

Gdiplus::Bitmap *pBitmap = new Gdiplus::Bitmap(pStream);
HICON YOUR_HICON = pBitmap->GetHICON();

【讨论】:

在没有 ATL 或 GDI+ 的情况下有什么办法吗? 更正:现在您确实拥有 HICON。没有 ATL 或 GDI+——不知道 Epaga,我不再是那种铁杆了。 我在 GDI+ 中看不到 Icon 类 - 相反,它可以与 Gdiplus::Bitmap 和 GetHICON 一起使用。 对!当然。图标在 .NET 中,但不在 GDI+ 中。对不起。是的,Gdiplus::Bitmap 然后 GetHICON 应该可以工作。【参考方案2】:

看起来您可以使用 CreateBitmap 和 CreateIconIndirect 来执行此操作,或者甚至可以只使用 CreateIcon。不要问我代码,因为我对这些低级图形的东西并不熟悉。

【讨论】:

以上是关于从 C++ 中的字节数组创建 HICON?的主要内容,如果未能解决你的问题,请参考以下文章

从 C++ 中的字节数组中提取非零索引的最快方法是啥

如何将从 C++ 发送的 cv::MAT 字节数组转换为 Java 中的位图?

将字节数组从java程序发送到c++

如何通过引用从 c# 到 c++ 传递字节数组

如何在 C++ 中从字节数组(在 BIG-ENDIAN 中)中提取单个字段

从 C++ 将字节数组传递给 lua 脚本方法