1

サイズが 16x16、24x24、および 32x32 の 32 ビット イメージを含むアイコンがあります。3 つの異なるサイズの画像を含む 3 つの ImageList オブジェクトを作成し、ユーザーが選択したサイズを指定して、ToolStrip に ImageList プロパティを割り当てます。ただし、ToolStrip オブジェクトに表示される画像はすべて、32x32 の画像を拡大縮小したものです。たとえば、16x16 の ImageList を作成するときに、アイコンから 16x16 の画像が抽出されない理由がわかりません。私のコードは基本的に次のようになります。

ImageList m_imageList16 = new ImageList();
m_imageList16.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
m_imageList16.ImageSize = new System.Drawing.Size(16, 16);
m_imageList16.TransparentColor = System.Drawing.Color.Transparent;

// Open is an icon in my resources that contains various sizes of images. 
m_imageList16 .Images.Add(global::MyTestApp.Properties.Resources.Open);

// Later when the user selects the 16 size from a menu, I change the toolbar:
m_toolbar.ImageScalingSize = new Size(16, 16);
m_toolbar.ImageList = m_imageList16;

これは、アイコンで定義された 16x16 の画像を使用するのではなく、アイコンで 32x32 サイズの画像を取得して 16x16 に縮小するだけのようです。誰でもこれを手伝ってもらえますか?ご意見をお寄せいただきありがとうございます。

  • スティーブ
4

2 に答える 2

1

私の理論を裏付ける証拠は見つかりませんが、ImageList は異なるサイズのアイコンの選択を認識していないようです。私の推測では、アイコンをビットマップに変換してそのデータを保存するだけです。

MSDN フォーラムで、MVP ユーザー nobugz からの次のスニペットを見つけました。

問題を再現できると思います。MicroAngelo (アイコン エディター ユーティリティ) を使用して shell32.dll からアイコン #5 を抽出し、それをディスクに保存してから、そのアイコンを 16x16 の ImageList に追加すると、補間が不十分なバージョンのアイコンが表示されます。アイコンを編集して 16x16x256 色以外のすべての形式を削除すると、見栄えの良いシャープなバージョンのアイコンが得られます。

ImageList は、ImageList の ImageSizeおよび ColorDepth プロパティに最適なアイコンを選択するほどスマートではないようです。特にスマートなコントロールではありませんでした。これはシナリオと完全には一致しませんが、結果は同じです。32x32 の PhysicalDimension を見ると、アイコンを抽出したときに問題が発生したことがわかります。編集済みのアイコンには 16x16 が表示されますが、編集されていないアイコンには 32x32 が表示されます。

また、CSharpKey のこのページは、ImageLists とアイコンを扱う便利なリソースのようです。ここに抜粋があります:

アイコンのリストを作成する場合は、デフォルト サイズの 16x16 で各アイコンを作成できます。場合によっては (たとえば、リスト ビューにイメージを使用する場合)、サイズがそれぞれ 32x32 (および/または 48x48)の 2 番目のアイコン セットを作成または設計できます。

ImageList が単に 1 つのサイズを格納し、格納されたイメージのリサンプリングされたバージョンを返すのは、「行間を読み取る」ようです。

編集

CodeProject ( Embedding Icons in your VB.NET application ) で、次のような別のリファレンスを見つけました。

ImageList は単一の解像度でビットマップとして画像を保存するだけであることに気付くまでは、それはかなり良い解決策のように思えました。したがって、アプリケーション全体で使用したいさまざまなサイズのこれらの優れたアイコンがすべてある場合、さまざまなサイズを使用する可能性があります (アイコンは 1 つのファイルに複数のサイズが格納されているため)、ImageList では十分ではありませんでした。

于 2011-02-18T16:49:40.587 に答える