我正在尝试用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 );
}
答案 0 :(得分:0)
我在使用位图之前遇到过类似的问题。如果它从磁盘加载时工作正常,那几乎可以肯定,因为将它作为资源嵌入会以某种方式破坏它。当您将“已知”图像类型存储为资源时,似乎会发生一些奇怪的事情。在位图的情况下,我发现似乎某些位图标头被剥离了,这意味着如果我使用第三方图像库,我就无法将其作为资源加载。
我最终找到的解决方案是通过手动编辑.rc文件来创建一个新的资源类型,并将图标另存为。所以不要这样:
IDR_MAINFRAME ICON "res\\Merckx.ico"
你会有这样的事情:
IDR_MAINFRAME USERICN "res\\Merckx.ico"
我不知道是否将它作为带有资源ID的Gdiplus :: Image加载仍然有效。如果没有,您可能必须使用LoadResource()手动加载资源,然后从流创建Gdiplus :: Image对象。关于如何做到这一点,有一篇很好的文章here。
希望有所帮助。我知道这似乎是一个奇怪的解决方案,但值得一试。