ツールバーと画像コレクションを備えたアプリケーションがあります。問題は、元の画像がなく、同じボタンのいくつかを使用して別のツールバーを作成する必要があることです。画像コレクションをツールバーからファイルに保存する方法はありますか?
リソースファイルから画像を抽出しようとしましたが、どの画像が保存されているのかわかりません。
ツールバーと画像コレクションを備えたアプリケーションがあります。問題は、元の画像がなく、同じボタンのいくつかを使用して別のツールバーを作成する必要があることです。画像コレクションをツールバーからファイルに保存する方法はありますか?
リソースファイルから画像を抽出しようとしましたが、どの画像が保存されているのかわかりません。
質問に対する答えは見つかりませんでしたが、ツールバーの画像リストを読み取り、指定された画像キーに従って各画像をファイルに保存することで、画像を取得することができました。
for (int x = 0; x < this.imageListToolbar3small.Images.Count; ++x)
{
Image temp = this.imageListToolbar.Images[x];
temp.Save(this.imageListToolbar.Images.Keys[x] + ".png");
}
これは、この質問への回答から来ました:VS2005で画像リストから画像をエクスポートする方法は?
InitializeComponent呼び出しの後にコードを追加し、すべての画像をデバッグモードで保存しました。アプリケーション全体を実行する必要はありませんでした。
リソースファイルのみを使用してツールバーから画像を取得するためのより良いアイデアや小さなアプリケーションを誰かが持っているなら、それはありがたいです。これは回避策であるため、回答としてマークしません。
私はこのアプローチを使用します:
foreach (ToolBarButton b in toolBar.Buttons)
{
//can be negative, for separators, because separators don't have images
if (b.ImageIndex >= 0)
{
Image i = toolBar.ImageList.Images[b.ImageIndex];
i.Save(b.ImageIndex + ".png");
}
}
コントロールのプライベートImageListメンバーから画像を回復する必要がありました。次のコードを使用しました(申し訳ありませんが、VBですが、s / bはリファクタリングが簡単です)
Dim cntrl = New TheClassWithThePrivateImageList
Dim pi As Reflection.PropertyInfo, iml As System.Windows.Forms.ImageList, propName = "ThePropertyName"
pi = cntrl.GetType.GetProperty(propName, Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance)
iml = CType(pi.GetValue(cntrl), System.Windows.Forms.ImageList)
For Each key In iml.Images.Keys
Dim image As Drawing.Image = iml.Images.Item(key)
image.Save($"{propName}_{key}")
Next