SoftwareBitmapからbyte配列を得る ― 2017年09月12日 16:51
SoftwareBitmapの個々のピクセルにアクセスして編集するために、byte配列に変換する。明るさの変換などは、streamアクセスでも構わないが、任意の点の位置を変換するような処理では、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のデバッグ画面を見る限り、メモリの使用量が大きくなりすぎるようでもない。一度きりの処理であれば、問題はなさそう。
コメント
トラックバック
このエントリのトラックバックURL: http://c5d5e5.asablo.jp/blog/2017/09/12/8675571/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。