single.php

C# WinUI3でWriteableBitmapを塗りつぶす方法

C# WinUI 3アプリを作っていく途中で、調べたことを忘録的に投稿します。今回はWinUI3プロジェクトで[Image]コントロールのソースとして使えるWriteableBitmapを塗りつぶす方法です。

バイト配列で塗りつぶす

WinUI3のアプリで[Image]コントロールに読み込ませて([Source]プロパティ)表示が可能な[WriteableBitmap]です。

画像ファイルの読み込み先としては[BitmapImage]を使いますが、ゼロから画像を作る場合には[WriteableBitmap]が使えます。

と言っても、無垢の画像を作るまでは簡単ですが、そこから先はバイト配列を操作する必要です。

別の操作で作成した画像をバイト列にして読み込ませるか、データベースのフィールドから取り出したデータを画像として表示させる使い方だと思います。

こんな感じで、ストリームとして取り出すことができるので、後はバイト配列のデータを書き込めば画像として取り扱えます。

Stream stream = writeableBitmap.PixelBuffer.AsStream();

具体的には次のコードで[WriteableBitmap]を任意のカラーで塗りつぶせます。

private WriteableBitmap CreateBlankWriteableBitmap(int bitmapWidth, int bitmapHeight, int imageColorA, int imageColorR, int imageColorG, int imageColorB)
{
  WriteableBitmap writeableBitmap = new WriteableBitmap(bitmapWidth, bitmapHeight);
  byte[] colorBuffer = Enumerable.Repeat(new[] { (byte)imageColorB, (byte)imageColorG, (byte)imageColorR, (byte)imageColorA }, writeableBitmap.PixelHeight * writeableBitmap.PixelWidth).SelectMany(b => b).ToArray();
  Stream stream = writeableBitmap.PixelBuffer.AsStream();
  if (colorBuffer != null)
  {
      stream.Write(colorBuffer, 0, colorBuffer.Length);
  }
  return writeableBitmap;
}

実行すると、引数[bitmapWidth][bitmapHeight]で指定したサイズで任意のARGBで塗りつぶされた画像が取得されます。

まとめ

今回は短い記事ですが、WinUI3プロジェクトで[Image]コントロールのソースとして使える[WriteableBitmap]を塗りつぶす方法について紹介しました。

バイト配列で操作が可能なので、ARGB形式で準備した配列を、[PixelBuffer]プロパティで取得できるストリームに書き込みすれば、任意の色で塗りつぶせます。

WinUI 3で、[WriteableBitmap]を塗りつぶしたい人の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

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