酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

WindowsストアアプリでWriteableBitmapオブジェクトのピクセルデータをbyte[]型で取得する

Windowsストアアプリには、執筆時点で普遍的に使用可能な画像処理ライブラリが存在しません。よって、デベロッパーが自前で、直接ピクセルデータを触ってエフェクト等の画像処理をおこなう必要があります。

Windowsストアアプリで画像を扱う代表的なクラスは、

  • BitampImageクラス
  • WriteableBitampクラス

の2つです。

BitampImageオブジェクトから直接ピクセルデータに触れる方法は存在せず、WriteableBitampオブジェクトからのルートに限定されます。

Windows PhoneアプリではBitmapImageオブジェクトをコンストラクタ引数にしてWriteableBitmapオブジェクトを生成するルートがありましたが、Windowsストアアプリでは存在しません。

IBuffer型からbyte型配列に変換するには、IBufferクラスの拡張メソッドであるToArrayメソッドを使用します。この拡張メソッドを使用するにはusingディレクティブに以下の名前空間を定義します。

using System.Runtime.InteropServices.WindowsRuntime;

WriteableBitmapオブジェクトを取得するメソッドを仮のGetBitampメソッドがあるとします。WriteableBitampオブジェクトが保持しているピクセルデータは、PixelBufferプロパティを介して取得することが可能です。

WriteableBitmap bmp = GetBitamp();
var pixels = bmp.PixelBuffer.ToArray();

WinRTでの画像処理に関する詳しい記事を書きました。