実現したいこと
リソースファイルに画像(png)のリソースを追加する際に、型をBitmapに設定したいです。
現状と問題点
visual studio2022でC#のwindowsフォームアプリ(.NET8.0)を作ろうとしています。リソースファイルについて質問があります。プログラミング初心者なので可能でしたら簡単に説明していただけると幸いです。
まず、以下の手順でリソースファイルを作成しました。
プロジェクト名を右クリックしてプロパティを開く
-->リソースを選択し、「アセンブリ リソースを作成する/開く」をクリック
これによりPropertiesフォルダが作成され、その下にResource.resxが作成されました。
また、同時にリソースエクスプローラーが表示されるようになりました。ここに、以下の手順でリソースを追加しようとしました。
リソースエクスプローラーの左上でResourcesを選択(他の選択肢にはForm1がある)
-->画面上部のプラスマーク(リソースの作成)をクリック
-->新しいリソースの追加という画面が表示される
-->タイプの項目でImageを選択
-->既存のファイルを追加から、ローカルに保存してある画像ファイル(png)を選択
-->名前を付けて保存という項目に2つの選択肢が表示されるので、どちらかを選ぶ
・System.Byte
・System.Drawing.Icon(Windows Forms)
-->ファイルに追加の項目がResources.resxであることを確認する
-->名前はデフォルトのまま変更せず追加をクリック
まず、System.Drawing.Icon(Windows Forms)を選択した場合、直ちに問題が生じます。以下の文章が出力に表示されました。
[15:54:52.031785] fail: Request failures: Sessions/InitializeRootComponent.
Microsoft.DotNet.DesignTools.Client.DesignToolsServerException: 行 123、位置 5 上のデータの型 は、作成中に次の例外をスローしたため読み込めません:Argument 'picture' must be a picture that can be used as a Icon. Line 123, position 5. ---> Microsoft.DotNet.DesignTools.Client.DesignToolsServerException: Argument 'picture' must be a picture that can be used as a Icon.
--- 内部例外スタック トレースの終わり ---
.icoではなく、.pngにもかかわらずSystem.Drawing.Icon(Windows Forms)が選択されることが問題なのではないかと考えられます。
次に、System.Byteを選択した場合です。選択し、リソースを追加した段階では正常です。ここで、Form1.csに以下のようなコードを書きました。
cs
1namespace WinFormsApp1 2{ 3 public partial class Form1 : Form 4 { 5 Image image = Properties.Resources.<リソース追加時の名前>; 6 public Form1() 7 { 8 InitializeComponent(); 9 } 10 } 11}
すると、Properties.Resources.<リソース追加時の名前>に赤く波線が引かれ、
「型'byte[]'を'System.Drawing.Image'に暗黙的に変換できません」
というメッセージが表示されました。png画像をリソースに追加し、Bitmap型として利用したいです。そのためには、一旦System.Drawing.Icon(Windows Forms)を仕方なしに選択してから、以下のような手続きを踏む必要がありました。
cs
1using System.IO; 2namespace WinFormsApp1 3{ 4 public partial class Form1 : Form 5 { 6 Image image; 7 byte[] imageData = Properties.Resources.<リソース追加時の名前>; 8 9 public Form1() 10 { 11 InitializeComponent(); 12 using (MemoryStream ms = new MemoryStream(imageData)) 13 { 14 image = Image.FromStream(ms); 15 } 16 } 17 } 18}
これでも問題なく希望の結果が得られるのですが、毎度これでは面倒です。可能であれば、pngをリソースファイルに追加する時点で型をBitmapにしておきたいです。
動画やブログでいろいろと調べていると、どの方もリソースファイルを作るところまでは同じなのですが、リソースエクスプローラーではなく、それによく似た画面が表示されていました。そこへ画像をドラッグアンドドロップするだけでリソースを追加できており、その上、型もBitmapになっていました。リソースエクスプローラーに画像ファイルをドラッグアンドドロップすると、ピクセル単位に拡大された画像が表示されるだけであり、リソースの追加すらされませんでした。
理想は、ドラッグアンドドロップでリソースを追加することですが、そうでなくてもpngをリソースに追加する際にBitmap型が選べるようになってほしいです。何か方法はありますでしょうか。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー