WPFのBitmapImageオブジェクトを使って画像ファイルの加工するプログラムを作りたいのですが、バッチ処理をする場合GUIは必要ないのでコンソールアプリとして作成したい。
WinFomrsなどで使われるBitmapオブジェクトの場合ConsoleプロジェクトにNugetでSystem.Drawing.Commonパッケージを追加する方法がありますが、WPFのBitmapImageを使う場合どうしたら良いのでしょうか?ネット検索で答えを探そうと思いましたが、検索ワードが思いつきませんでした。
過去にdotnet.exeで単体テストのプロジェクトを作成する記事を書きました。それ以来単体テストをすることも無く忘れていましたが、単体テストのプロジェクトでWinFormsのプロジェクトを参照する手順があり、WPFとConsoleプロジェクトでも同様なことが出来るのではないかと試してみました。
dotnet.exeでwinformsの単体テスト(mstest)のプロジェクト作成
dotnet.exeで単体テスト(mstest)を実施する為のプロジェクトの作成方法を調べてみました。プロジェクトの作成// ソリューション名:QQQ// WinFormsプロジェクト名:QQQ.Winform// 単体テストプロジェクト名...
プロジェクトを作成
mkdir QQR
cd QQR
dotnet new sln
mkdir QQR.WPFLib
cd QQR.WPFLib
dotnet new wpflib
dotnet sln ..\QQR.sln add QQR.WPFLib.csproj
cd ..
mkdir QQR.Console
cd QQR.Console
dotnet new console
code QQR.Console.csproj
//TargetFrameworkをnet7.0からnet7.0-windowsへ変更
dotnet sln ..\QQR.sln add QQR.Console.csproj
dotnet add reference ..\QQR.WPFLib
dotnet add package System.Console
ソースコード
ファイル名:QQR.WPFLib\Class1.cs
using System;
using System.Windows.Media.Imaging;
using System.IO;
namespace QQR.WPFLib;
public class Class1
{
public static void ConvertPNG(string srcFile, string destFile)
{
using var fs = new FileStream(srcFile, FileMode.Open, FileAccess.Read);
var bi = new BitmapImage();
bi.BeginInit();
bi.CreateOptions = BitmapCreateOptions.None;
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.StreamSource = fs;
bi.EndInit();
bi.Freeze();
using var stream = new FileStream(destFile, FileMode.Create, FileAccess.Write);
var encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bi));
encoder.Save(stream);
}
}
ファイル名:QQR.Console\Program.cs
using System;
using System.Diagnostics;
namespace QQR.Console;
class Program1
{
public static void Main()
{
string srcFile = @"C:\Users\karet\Pictures\20230430\1680690888774.jpg";
string destFile = @"F:\csharp\QQR\output.png";
QQR.WPFLib.Class1.ConvertPNG(srcFile, destFile);
System.Console.WriteLine("aaa");
}
}
実行
dotnet run
コメント