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

以前にビットマップで同様の問題が発生しました。ディスクからロードするときに正しく機能する場合、リソースとして埋め込むと何らかの形でマングリングされるため、ほぼ確実です。「既知の」画像タイプをリソースとして保存すると、奇妙なことが起こるようです。ビットマップの場合、ビットマップ ヘッダーの一部が取り除かれているように見えました。つまり、サード パーティの画像ライブラリを使用すると、ビットマップ ヘッダーをリソースとして読み込めませんでした。

私が最終的に見つけた解決策は、.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 に答える