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
  
  
  
  

コメント