WPFで画像加工を扱うコードを書く場合、Consoleプロジェクトで試作したいと思い調べてみました。WPFのスレッドモデル(STAThread)を守る必要ありとのこと。
プロジェクトの作成
cd (mkdir WpfBitmapConsole)
dotnet new console -f net8.0
ソースコード
ファイル名:WpfBitmapConsole.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework><!-- ←変更 -->
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<UseWPF>true</UseWPF><!-- ←追加 -->
</PropertyGroup>
</Project>
ConsoleですがTargetFrameworkはnet8.0-windowsで、WPFを使うのでUseWPFはtrueをセットします
ファイル名:Program.cs
using System.IO;
using System.Windows.Media.Imaging; // WPF名前空間
class Program
{
[STAThread] // WPFコンポーネントを使うにはSTAThreadが必要
static void Main()
{
string imagePath = @"065.png"; // 任意の画像パスに置き換えてください
// BitmapImageの読み込み
var bitmap = new BitmapImage();
using var stream = new FileStream(imagePath, FileMode.Open, FileAccess.Read);
bitmap.BeginInit();
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = stream;
bitmap.EndInit();
bitmap.Freeze(); // マルチスレッド対応
Console.WriteLine($"画像サイズ: {bitmap.PixelWidth} x {bitmap.PixelHeight}");
}
}
実行
dotnet run
# 実行結果
# 画像サイズ: 1127 x 1600
コメント