Gdiplus::图标资源中的图像

Gdiplus::Image from icon resource?

本文关键字:图像 资源 图标 Gdiplus      更新时间:2023-10-16

我正在尝试用gdi+绘制一个图标。当直接从磁盘加载图标文件时,我可以正常工作,但如果可能的话,我希望将图标存储在资源中。有没有一种简单的方法可以在不失去决心的情况下做到这一点?

    // The image draws and looks exactly how I want it to
    Gdiplus::Image indicator(L"\Indicator.ico");
    graphics->DrawImage( &indicator, 7, 7 );
    // The image draws, but looks bloated and pixel-y
    const HICON hIcon = AfxGetApp()->LoadIcon( IDI_INDICATOR );
    if ( hIcon )
    {
        Gdiplus::Bitmap* bitmap = Gdiplus::Bitmap::FromHICON( hIcon );
        graphics->DrawImage( bitmap, 7, 7 );
    }

我以前也遇到过类似的位图问题。如果它在从磁盘加载时工作正常,那么几乎可以肯定的是,将它作为资源嵌入会以某种方式破坏它。当您将"已知"图像类型存储为资源时,似乎会发生一些奇怪的事情。在位图的情况下,我发现一些位图标头似乎被剥离了,这意味着如果我使用第三方图像库,我就无法将其作为资源加载。

我最终找到的解决方案是通过手动编辑.rc文件创建一个新的资源类型,并将图标保存为该类型。因此,取而代之的是:

IDR_MAINFRAME           ICON                    "res\Merckx.ico"

你会有这样的东西:

IDR_MAINFRAME           USERICN                 "res\Merckx.ico"

我不知道将其加载为具有资源ID的Gdiplus::Image是否仍然有效。如果没有,您可能需要使用LoadResource()手动加载资源,然后从流中创建Gdiplus::Image对象。这里有一篇关于如何做到这一点的好文章。

希望能有所帮助。我知道这似乎是一个有点奇怪的解决方案,但它值得一试。