0

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

1 回答 1

0

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

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

IDR_MAINFRAME           ICON                    "res\\Merckx.ico"

你会有这样的事情:

IDR_MAINFRAME           USERICN                 "res\\Merckx.ico"

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

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

于 2013-06-27T07:51:21.180 回答