実現したいこと
png画像を共有プロジェクトに埋め込みリソースとして導入しました。
この画像をC#のプログラムソースのみで読み込みを行い、縦横幅の取得とバイナリ化を行いたいと考えております。
該当のソースコード
プログラムソースは以下の形となっております。
C#
1 //=================================================== 2 // テスト画像のリソースID 3 //=================================================== 4 private String[] ImageList = 5 { 6 "ShikonMulti.Resources.Image.button_red.png", 7 }; 8 9 //=================================================== 10 // 画像読み込み 11 //=================================================== 12 public void ReadImage() 13 { 14 int i, len; 15 16 byte[] array; 17 byte[][] image = null; 18 int[,] size = null; 19 20 Image temp; 21 Assembly asm; 22 ImageSource src; 23 ImageConverter ic = new ImageConverter(); 24 25 len = ImageList.Length; 26 image = new byte[len][]; 27 size = new int[len, (int)Def.XY]; 28 29 for (i = 0; i < len; i++) 30 { 31 asm = Assembly.GetExecutingAssembly(); 32 src = ImageSource.FromResource(ImageList[i], asm); 33 temp = new Image { Source = src }; 34 size[i, (int)Def.X] = (int)temp.Width; 35 size[i, (int)Def.Y] = (int)temp.Height; 36 37 array = (byte[])ic.ConvertTo(temp, typeof(byte[])); 38 image[i] = array; 39 } 40 } 41
※『Def.X』はint値の1、『Def.Y』はint値の1、『Def.XY』はint値の2となります。
イメージを格納しているフォルダの構成は以下の形です。
※画像button_red.pngの縦横幅は128x128です。
試したこと
実行したところ、temp.Width、temp.Heightは-1を返してきます。
その状態でImageConverter.ConvetToを実行すると、System.InvalidCastExceptionが発生します。
リソースIDを色々と変えてみたのですが、temp.Width、temp.Heightの値は-1のままでした。
System.InvalidCastExceptionも同様に発生します。
srcについては、リソースIDの内容に関わらず、nullではなく何らかのImageSourceの参照が入っていることは確認しました。
また、asmはメインのAssemblyである、ShikonMulti.dllを取得できています。
20210610:追記
リソースIDそれ自体は正しいのではないかと判断しています。
また、ImageConverter.CanConvaertTo(typeof(byte[]))についてはtrueを返していることが確認できました。
お尋ねしたいこと
上記の状態において、リソースIDは正しく指定されておりますでしょうか?
また、縦横幅の取得方法とバイナリ化の手段に何か問題はありますでしょうか?
何かお気付きの点などありましたらご指摘をお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/11 05:16