Quantcast
Channel: 午後わてんのブログ
Viewing all articles
Browse latest Browse all 420

WPF、アプリの実行ファイルに画像ファイルを埋め込んで、それを取り出して表示するまでの手順メモ

$
0
0

デザイン画面
イメージ 2

イメージ 3
画像を表示するようのImageを追加しただけ




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"));
        }

    }
}




埋め込む画像はこれ
イメージ 1
ファイルのパスは
D:\ブログ用\テスト用画像\HSVRectValue.png
だった


MainWindow.xaml.csの画面
イメージ 4
最初の画面


準備
  1. ソリューションエクスプローラーのプロジェクト名の、右クリックメニューから、追加→既存項目で画像ファイルを追加する
  2. 追加した画像の右クリックメニューからプロパティで、ビルドアクションを埋め込みリソースに変更

1. 画像ファイル追加
ソリューションエクスプローラー
イメージ 5
だいたいこんな感じになっている


埋め込む場所はプロジェクト
イメージ 6
「20190331_画像埋め込み」ってのが今回のプロジェクト名
ここに埋め込むのでここを右クリックして


イメージ 7
右クリックメニューから
追加→既存の項目クリックで

ファイル選択画面
イメージ 8


イメージ 9
ファイルのパスがわかっていればそれを入れて追加

画像を見て選ぶなら右下の
イメージ 10
ファイルの種類をイメージファイルにして

イメージ 11
選んで追加ボタンクリックで追加される


ソリューションエクスプローラーで確認
イメージ 12
プロジェクトに画像が追加された


2. ビルドアクションを埋め込みリソースに変更
イメージ 13
右クリックメニューのプロパティから


イメージ 14
ビルドアクションがResourceになっているので
右の∨をクリックして


イメージ 15
リストから埋め込みリソースを選択


イメージ 16
変更完了

これで準備が整った
イメージ 12
20190331_画像埋め込み.HSVRectValue.png


あとはC#で
MyImage.Source = BitmapFrame.Create(System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("_20190331_画像埋め込み.HSVRectValue.png"));
これを書いて実行すると
イメージ 17
表示された!


さっき1行で書いたのを分けて書いてみると
System.Reflection.Assembly sra = System.Reflection.Assembly.GetExecutingAssembly();
var bf = BitmapFrame.Create(sra.GetManifestResourceStream("_20190331_画像埋め込み.HSVRectValue.png"));
MyImage.Source = bf;
イメージ 18

12行目、アプリの実行ファイルを取得している感じ?
イメージ 19
完全に理解した(わからん)

そこからGetManifestResourceStreamっていうメソッドに、埋め込んだ画像のパスを渡すと画像が取り出せた
画像のパスは「プロジェクト名.画像ファイル名」
イメージ 21
プロジェクト名というか4行目のnamespaceの名前でいいのかな
これに.ピリオドをつけたあとに画像ファイル名の
20190331_画像埋め込み.HSVRectValue.png
これを指定

GetManifestResourceStream
イメージ 22
わからんけど、名前の通りStreamで取り出せるみたい?

StreamからBitmapにするのにBitmapFrameのCreateメソッドを使用
イメージ 20
これでBitmapFrameとして取り出せたので
最後に
イメージ 23
ImageのSourceに指定して完了


実行ファイルだけで表示されるのか確認
イメージ 24
実行ファイルだけ別の場所にコピーして実行

イメージ 17
おk

失敗例
ビルドアクションがResourceのままだと
イメージ 25
取り出そうとしたところで無いって言われる


完走した感想
WindowsFormアプリのときに同じことがあったんだけど、WPFでは取り出しのところが違うみたいで、同じ方法ではできなかった
この前の市松模様画像もマスの大きさや色が固定でもいいなら、今回の方法で使ったほうがラクかなあ
DLLファイルも同じように埋め込んで取り出せて参照できればいいのにねえ




参照したところ

Viewing all articles
Browse latest Browse all 420

Trending Articles