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]を塗りつぶしたい人の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。