C#のConsoleアプリケーションでWPFのBitmapImageを扱う

コンピュータ

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

コメント