デザイン画面
using System.Windows;
using System.Windows.Media.Imaging;
namespace _20190331_画像埋め込み
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
System.Reflection.Assembly sra = System.Reflection.Assembly.GetExecutingAssembly();
var bf = BitmapFrame.Create(sra.GetManifestResourceStream("_20190331_画像埋め込み.HSVRectValue.png"));
MyImage.Source = bf;
//1行で
//MyImage.Source= BitmapFrame.Create(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("_20190331_画像埋め込み.HSVRectValue.png"));
}
}
}
埋め込む画像はこれ
D:\ブログ用\テスト用画像\HSVRectValue.png
だった
MainWindow.xaml.csの画面
準備
- ソリューションエクスプローラーのプロジェクト名の、右クリックメニューから、追加→既存項目で画像ファイルを追加する
- 追加した画像の右クリックメニューからプロパティで、ビルドアクションを埋め込みリソースに変更
1. 画像ファイル追加
ソリューションエクスプローラー
だいたいこんな感じになっている
埋め込む場所はプロジェクト
「20190331_画像埋め込み」ってのが今回のプロジェクト名
ここに埋め込むのでここを右クリックして
追加→既存の項目クリックで
ファイル選択画面
ファイルのパスがわかっていればそれを入れて追加
画像を見て選ぶなら右下の
ソリューションエクスプローラーで確認
2. ビルドアクションを埋め込みリソースに変更
右の∨をクリックして
これで準備が整った
20190331_画像埋め込み.HSVRectValue.png
あとはC#で
MyImage.Source = BitmapFrame.Create(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("_20190331_画像埋め込み.HSVRectValue.png"));
これを書いて実行すると
さっき1行で書いたのを分けて書いてみると
System.Reflection.Assembly sra = System.Reflection.Assembly.GetExecutingAssembly();
var bf = BitmapFrame.Create(sra.GetManifestResourceStream("_20190331_画像埋め込み.HSVRectValue.png"));
MyImage.Source = bf;
12行目、アプリの実行ファイルを取得している感じ?
完全に理解した(わからん)
そこからGetManifestResourceStreamっていうメソッドに、埋め込んだ画像のパスを渡すと画像が取り出せた
画像のパスは「プロジェクト名.画像ファイル名」
これに.ピリオドをつけたあとに画像ファイル名の
20190331_画像埋め込み.HSVRectValue.png
これを指定
GetManifestResourceStream
StreamからBitmapにするのにBitmapFrameのCreateメソッドを使用
最後に
ImageのSourceに指定して完了
実行ファイルだけで表示されるのか確認
実行ファイルだけ別の場所にコピーして実行
おk
失敗例
ビルドアクションがResourceのままだと
完走した感想
WindowsFormアプリのときに同じことがあったんだけど、WPFでは取り出しのところが違うみたいで、同じ方法ではできなかった
この前の市松模様画像もマスの大きさや色が固定でもいいなら、今回の方法で使ったほうがラクかなあ
DLLファイルも同じように埋め込んで取り出せて参照できればいいのにねえ
参照したところ