v1.6ではデコード前のカラーカメラのデータが取得できるようになりました。RawBayerというデータで僕は詳細はわかりませんが、検索しているとカメラ関係のがヒットするので、そういうことなんでしょう。
RawBayerデータを取得することで、RGBデータへの変換を自前でCPUなりGPUなりで行うことができるようになります。
とりあえずRawBayerデータで取得して表示してみます。
こちらに詳しい解説が書かれています。
カラーカメラ設定
赤外線と同様にRawBayerデータの取得にはカラーストリームを利用するので、ColorImageStream.Enable()のColorImageFormatとして設定します。RawBayerデータの取得には解像度によって2種類あるので、必要な方を設定します。
- RawBayerResolution640x480Fps30
- RawBayerResolution1280x960Fps12
kinect.ColorFrameReady += kinect_ColorFrameReady;kinect.ColorStream.Enable( ColorImageFormat.RawBayerResolution640x480Fps30 );
kinect.Start();
RawBayerデータの表示
更新されたカラーストリームから、RawBayerデータを取り出し表示します。基本的な流れはRGBデータと同じで、ColorImageFrame.CopyPixelDataTo()でデータを取得し、BitmapSource.Create()で画像化して表示します。ただし、RGBデータは32bitのBGRデータに対して、RawBayerデータは8bitになるので、データ長や、表示のためのフォーマットが変わります。データ長(ColorImageFrame.PixelDataLength)やピクセルあたりのバイト数(ColorImageFrame.BytesPerPixel)はColorImageFrameのデータを使っていれば変更ありません。Bitmapデータのフォーマットのみ「PixelFormats.Gray8」になります。
// RawBayerデータを表示するusing ( ColorImageFrame colorFrame = e.OpenColorImageFrame() ) {
if ( colorFrame != null ) {
// 画像データを取得する
byte[] color = new byte[colorFrame.PixelDataLength];
colorFrame.CopyPixelDataTo( color );
// 画像を表示する(8bitのグレースケール)
imageRawBayer.Source = BitmapSource.Create(
colorFrame.Width, colorFrame.Height,
96, 96, PixelFormats.Gray8, null, color,
colorFrame.Width * colorFrame.BytesPerPixel );
}
}
全体のコードはこちらにあります