WPF Image Source Release File

AI彼女とはまったく関係ない話題ですが、ハニーセレクトスタジオを使用していた頃から自作のリナンバーアプリを使用していました。もちろんDAZ Studioに変わっても同じようなリナンバーアプリを作成して使用しています。この度WPFでコーディングをやり直しました。
まったく同じ機能なのに.NET Framework->.NET8 Winform->WPFと3段階移行しました。少しコードが違うだけと思いきや表示した画像ファイルにロックがかかって変名するとエラーになって困ったので、その回避策を書きます。

WPFでImageに画像を表示するのは下記のコードで行います。

ImageBox.ImageSource = new BitmapImage(new Uri("c:\hoge.png", UriKind.Relative));



しかし上記コードで画像を表示しつつ、水面下でその画像のファイルを変名または削除をすると掴みっぱなしになりエラーになります。ImageSourceに違う画像を読み込んだりnullを設定してもロックは外せません。
それを解消するために下記のファンクションを入れることで解消できます。

       ImageBox.ImageSource = LoadImage("c:\hoge.png");

        private BitmapImage LoadImage(string strPath) 
        {
            BitmapImage image = new BitmapImage();
            image.BeginInit();
            image.CacheOption = BitmapCacheOption.OnLoad;
            image.UriSource = new Uri(strPath);
            image.EndInit();
            return image;
        }



ちなみにDAZ用リナンバーアプリはこんな感じです。


犬マンマが作成しているのは漫画のようにセリフがあるCGなのでコマ割りがなくてページ=コマになっています。コマ割りするとシーン追加削除がめんどいのでそのような形にしています。接頭語+連番の命名にしていますのでページを入れたり抜いたりするときに、このアプリを使用して連番の部分を変更しています。DAZ Studioは*.dufという拡張子のファイルを作成します。同時にプレビューファイルとして*.duf.png、*.tip.pngが作成されます。また、DAZ StudioでレンダリングするとDAZ capフォルダに格納されます。それ以外にClip Studioで編集したファイルやjpgで出力したファイルcapフォルダから移動してきたpngなどを格納した画像フォルダがありますので、その3つのフォルダの場所を指定してその配下のファイルを同時に変名する必要があります。Prefix項目は関係ないファイルをリナンバーしないようにするためにルールとして指定するようにしています。行間項目は追加する場合は正の数を、減らす場合は負の数を入力します。リナンバー中に同じ名前のファイルがあってバッティングしないか事前チェックするようにしていますが間違えるとファイルをロストしてしまう可能性があるので処理の前に十分確認が必要です。

ご興味があればソース置いておきますのでDLして中身を見てください。

RenumberDAZソースダウンロード->https://ai.3ddoghouse.com/contents/dl/RenumberDAZ.zip

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です