2009-06-08 5 views
7

C#のツリービューで32x32バージョンと16x16バージョンの2つのアイコンを含む.icoファイルから画像を設定しようとしています。画像は設定されていますが、.Netは32x32のバージョンを選択しており、容易に利用できる16x16画像を選択する代わりに縮小しています(ひどく見えます)。C#:複数の画像で.icoファイルを使用する

関連するコード:

ilTree.Images.Add(Properties.Resources.group); 
ilTree.Images.Add(Properties.Resources.single); 
ilTree.Images.Add(Properties.Resources.db); 
treeStored.ImageList = ilTree; 

はどこで間違ったんですか?


回答:

あなたはこの作業を取得するためにしなければならない2つのものがあります。最初に述べるように、画像リストに正しいサイズを手動で指定することです。もう1つは、おそらく色の濃さを指定する必要があるということです。

.NET Frameworkバージョン1.1以降では、既定値はDepth8Bitです。

...しかし、ImageListが私の8ビットアイコンから色を削除するのを防ぐことはできませんでした。精密検査の結果、私のアイコン(3つありました):4ビット、4ビット、8ビット。 2つの4ビットアイコンはパレットを共有しましたが、8ビットは異なるパレットを持っていました。合計で、アイコンの間に257色がありました。唯一のわずかなオーバーフローにもかかわらず、.Netは単にの色にそれをノックダウンしました。

答えて

5

は新しいアイコンオブジェクトを作成する必要があります。オリジナルのIconオブジェクトとサイズを受け入れるコンストラクタのオーバーロードがあります。新しいIconオブジェクトが同じHIconを共有するかどうかはわかりませんが、適切に描画されます。安全のために、私は両方が処分されていることを確認することをお勧めします。

+0

さて、それは動作します。 TreeViewがちょうどThe Right Thing™をやってくれるのであれば、それは確かにはるかに良いでしょう... – Thanatos

+0

実際には、それほどではありません。これは - ilTree.ColorDepth = ColorDepth.Depth24Bit; - も必要です。それ以外の場合は、(間違って)16ビットとみなされます。 – Thanatos

+0

デフォルトは8ビットですが、以前に指定した色深度の画像をロードする必要があります。 – snarf

1

セットの新しいサイズにイメージリストのImageSizeプロパティ(16、16)

+0

これはImageListのデフォルトサイズです。手動で設定すると、それを追加すると効果はありません。 – Thanatos

+0

ええ、これは以前私のために働いていました。画像を追加する前に設定するのか、後で設定しますか?それがデフォルトであることを認識していませんでした。 – rein

+0

前に追加しようとしました。その後も効果はありません。 – Thanatos

関連する問題