7

Windows7でVisualStudio2010、C#を使用しています。

プロジェクトに通知コントロールを追加し、プロジェクトにインポートしたアイコンに設定しました。アイコンの画像は、プレビューするだけで非常に見栄えがしますが、コードを実行してシステムトレイに表示すると、直線ではなく側面が点線で表示されるなど、非常にひどいものになります。同じファイルの16x16、24x24、32x32、48x48を試しましたが、ひどい結果になりました。

私は何かを逃したことがありますか?

myNotifyIcon.Icon = SysDir.Properties.Resources.icon2_32_ico_rgba;
4

2 に答える 2

16

リソースでアイコンを直接使用する場合の問題は、アイコンファイルで適切なアイコンバージョンを選択する代わりに、フレームワークがデフォルトのアイコンバージョンを通知領域に必要なサイズに単純にスケーリングすることです。そのため、ギザギザのエッジが表示されます。

最高の品質を得るには、アイコンで適切なサイズを自分で選択する必要があります。

まず、NotifyIcon.Iconリソース内のアイコンに直接設定する代わりに、新しいIconインスタンスを作成します。そうすることで、アイコンリソースで特定のアイコンサイズを選択できるようになります。を使用SystemInformation.SmallIconSizeすると、通知領域に必要なサイズが得られます。

それで :

myNotifyIcon.Icon = new Icon(Properties.Resources.MyIcon, SystemInformation.SmallIconSize);

これで、SystemInformation.SmallIconSize常に正しいアイコンサイズが返されますが、アプリケーションがDPI対応の場合に限ります(それ以外の場合は、常に16が返されます)。アプリケーションがDPIに対応しておらず、DPIスケーリングが有効になっているシステムで使用されている場合、上の行でリソース内の16x16アイコンが選択され、通知領域に必要なサイズに拡大されます。 (言い換えれば、醜いアイコン)。

アプリをDPI対応にSystemInformation.SmallIconSizeすることで、DPIスケーリングを考慮して適切なサイズを返します。たとえば、DPIスケーリングが150%の場合、SystemInformation.SmallIconSize24(16×1.5)を返します。

アプリをDPI対応にするには、これをapp.manifestの<asmv1:assembly>タグ内に追加するだけです。

  <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>true</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>
于 2014-03-24T02:00:03.680 に答える
6

編集:

私がリンクしている情報は、現時点では疑わしいようです。試してみてください。うまくいかない場合は、質問を編集して、すべての実験のスクリーンショットを投稿することをお勧めします(各アイコンのサイズと拡大縮小方法)。

オリジナル:

32x32x256は、このリンクによると適切なサイズと色深度です。

http://www.hhhh.org/cloister/csharp/icons/

ただし、そのイメージを作成するときは、十分に注意する必要があります。

  • 16x16x256の画像を撮り、見栄えを良くします
  • 32x32に2倍にします(ペイントプログラムでこれを行う場合は、ぼかしたりリサンプリングしたりしないように注意してください)

その理由は、Windowsがピクセルの3/4を捨てるだけで、32x32の画像を16x16に「サイズ変更」するためです。上記のリンクは、いくつかのスクリーンショットでこの現象を示しています。

前:

アイコンを縮小する前

後:

アイコンを縮小した後

色深度のうるささ(256色のみ?)/リサンプリングの問題がWindows 7でも当てはまるかどうかはわかりませんが、XPでは確かに当てはまるようです。

于 2011-09-21T08:01:21.073 に答える