Gdiplus ::来自icon资源的图片?

时间:2013-06-25 17:21:59

标签: c++ gdi+

我正在尝试用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 );
    }

1 个答案:

答案 0 :(得分:0)

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

我最终找到的解决方案是通过手动编辑.rc文件来创建一个新的资源类型,并将图标另存为。所以不要这样:

IDR_MAINFRAME           ICON                    "res\\Merckx.ico"

你会有这样的事情:

IDR_MAINFRAME           USERICN                 "res\\Merckx.ico"

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

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