FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

画像ファイルをロックさせずに表示させる

 WPFで画像を表示させたい場合は、
<Image Source="{Binding ImageFilePath}"/>
の様に、Image要素のSourceに画像ファイルのPathを指定すればOKです。
 この場合、画像を表示している間は画像ファイルが使用中のためロックされます。
 そのため、この画像ファイルを削除する等のファイル操作を行うと以下の様な例外が発生します。
Image1_例外メッセージ
 画像を表示しつつ、ファイル操作も行いたい場合は画像をロックさせずに表示する必要があります。
using Livet;
using System.IO;
using System.Windows.Media.Imaging;

namespace Image1.ViewModels
{
    public class MainWindowViewModel : ViewModel
    {
        string ImagePath;

        public MainWindowViewModel()
        {
            ImagePath = @"画像ファイルのPath";

            using(var fs = new FileStream(ImagePath, FileMode.Open, FileAccess.Read))
            {
                // FileStreamからBitmapDecoderを作成します。
                // BitmapCacheOptionをOnLoadにすることで画像データをメモリにキャッシュします。
                var decoder = BitmapDecoder.Create(fs, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);

                ImageSource = decoder.Frames[0];
            }
        }

        #region ImageSource変更通知プロパティ
        private BitmapSource _ImageSource;

        public BitmapSource ImageSource
        {
            get
            { return _ImageSource; }
            set
            { 
                if (_ImageSource == value)
                    return;
                _ImageSource = value;
                RaisePropertyChanged();
            }
        }
        #endregion
    }
}
 ファイルをロックさせないために画像データをメモリにキャッシュするようにします。
 BitmapDecoderを作成する際にBitmapCacheOptionをOnLoadにすることで、画像データがメモリにキャッシュされます。
 あとはそのデータをImageのSourceに指定するだけです。
<Image Source="{Binding ImageSource}"/>
 これで画像データを表示しつつ、ファイル操作も行えます。
 画像データをメモリに置くので、サイズが大きい画像ファイルを幾つも扱う場合はメモリの使用量に注意してください。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

カレンダー
11 | 2018/12 | 01
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
全記事表示リンク

全ての記事を表示する

カテゴリ
タグリスト

月別アーカイブ
11  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09 
最新記事
リンク
最新コメント
検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。