从 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++ 发送的 cv::MAT 字节数组转换为 Java 中的位图?