SoftwareBitmapからbyte配列を得る2017年09月12日 16:51

SoftwareBitmapの個々のピクセルにアクセスして編集するために、byte配列に変換する。明るさの変換などは、streamアクセスでも構わないが、任意の点の位置を変換するような処理では、byte配列が必要になる。

SoftwareBitmapからbyte配列

MSの文書では、COMインタフェースを用いる方法が解説されているが(上の方のコメントアウトしたコード)、unsafeコードになる。他に方法はないかと、BitmapEncoderからstreamを介して、BitmapDecoderにデータを受け渡し、そこからピクセルデータを得る手順を考える。

445行:InMemoruRandomAccessStreamを用意。次の行でBitmapEncoderに紐付け。
447行:編集対象のSoftwareBitmapをBitmapEncoderに紐付け。
451行:イメージデータをstreamに書き出し。
461行:streamをBitmapDecoderに紐付け。
462行:BitmapDecoderからPixelDataProviderを生成。
464行:PixelDataProviderからbyte配列を取り出す。

取りだしたbyte配列は、XAMLのImageの標準と同じBGRA8形式なら、ピクセル数の4倍のサイズ。データの並び順は、左上の原点からスタートし、横方向に右に進み、端まで行くと、次の行、という順。

効率は良くないかもしれないが、VSのデバッグ画面を見る限り、メモリの使用量が大きくなりすぎるようでもない。一度きりの処理であれば、問題はなさそう。