速攻攻略 Kinect v2 プログラミング入門 2

参照設定

参照設定

ソリューションエクスプローラー内の「参照設定」に、Microsoft.Kinect.dllを追加する必要があります。この手順については第1回で解説していますので、そちらを参照してください。

ロジックコードを記述する

次に、ソリューションエクスプローラー内のMainWindow.xamlを展開して表示される、MainWindow.xaml.vbをダブルクリックしてリスト2のコードを記述します。

リスト2 メンバー変数の宣言など(MainWindow.xaml.vbの一部)

Imports Microsoft.Kinect   (1)
Class MainWindow
    Private myKinect As KinectSensor   (2)
    Private myColorFrameReader As ColorFrameReader = Nothing   (3)
    Private colorBitmap As WriteableBitmap = Nothing   (4)
    Private ColorImagePixelData As Byte()   (5)
    Private BytesPerPixel As Integer = 4 ‘CInt(PixelFormats.Bgr32.BitsPerPixel / 8)   (6)
  1. Kinectの使用を可能にするために、Microsoft.Kinect名前空間をインポートします。次は、メンバー変数を宣言します。
  2. Kinectセンサーを表すクラスであるKinectSensor型のメンバー変数myKinectを宣言します。
  3. カラーフレームリーダーを表すクラスであるColorFrameReader型のメンバー変数myColorFrameReaderを宣言します。
  4. WriteableBitmapクラス型のメンバー変数colorBitmapを宣言します。WriteableBitmapは、書き込みおよび更新が可能なBitmapSource を提供するクラスで、BitmapSourceは単一の一定なピクセルセットを、特定のサイズおよび解像度で表わすクラスを意味します。
  5. バイト型の配列であるメンバー変数ColorImagePixelDataを宣言します。6. Integer型のメンバー変数BytePerPixelを宣言し、「4」で初期化しておきます。この「4」という値は、32ビットフルカラーのRGB形式で、先頭から1バイト(8ビット)ずつ「青」、「緑」、「赤」の情報が入っており、各カラーチャネルに割り当てられる「bits per pixel(BPP)」が「8」のため、Bgr32を「8」で除算した「4」バイトを意味します。「青」、「緑」、「赤」では24ビットしか使用されませんが、残りの8ビットは「Alpha(不透明度)」に使用されることが多いです。「4」という直接的な値ではなく

    CInt(PixelFormats.Bgr32.BitsPerPixel / 8)

    と記述しても同じです。

ウインドウが読み込まれた時の処理

続いて、ウインドウが読み込まれた際の処理です。

リスト3 ウインドウが読み込まれた時の処理(MainWindow.xaml.vbの一部、リスト2の続き)

    Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
        myKinect = KinectSensor.GetDefault   (1)
        If myKinect Is Nothing = False Then
            myColorFrameReader = myKinect.ColorFrameSource.OpenReader(2)
            Dim myColorFrameDescripton As FrameDescription = myKinect.ColorFrameSource.CreateFrameDescription(ColorImageFormat.Bgra)   (3)
            ColorImagePixelData = New Byte(myColorFrameDescripton.Width * myColorFrameDescripton.Height * BytesPerPixel - 1) {}
            colorBitmap = New WriteableBitmap(myColorFrameDescripton.Width, myColorFrameDescripton.Height, 96.0, 96.0, PixelFormats.Bgr32, Nothing)  (4)
            AddHandler myColorFrameReader.FrameArrived, AddressOf myColorFrameReader_FrameArrived   (5)
            myKinect.Open()   (6)
        End If
    End Sub
  1. 最初に、Kinectセンサーを使用可能にします。Kinectセンサーが使用可能な状態にある場合は、以下の処理を行います。
  2. カラーフレームのソースを取得する、ColorFrameSourceのOpenReaderメソッドで、カラーフレームのソースフレームのリーダーを開きます。
  3. KinectSensorからのイメージフレームのプロパティを表わすクラスである、FrameDescriptionクラス型の変数myColorFrameDescriptionを宣言し、ColorFrameSource.CreateFrameDesciptionメソッドで、指定した形式のColorFrameのFrameDescription オブジェクトを作成します。この場合は、ColorImageFormatが「Bgra形式」のFrameDescriptionオブジェクトを作成します。簡単にいうと、「BGRA形式」のカラー画像の情報を作成することになります。次にバイト配列を作成します。
  4. 指定したパラメーターを使用して、WriteableBitmapのインスタンスを作成します。WriteableBitmapの書式は下記の通りです。

    WriteableBitmap(pixelWidth,pixelHeight,dpiX,dpiY,pixelFormat,palette)

    「dpiX」は「ビットマップの水平ドット/インチ」を、「dpiY」は「ビットマップの垂直ドット/インチ」を表します。通常は両方とも「96.0」を指定します。「PixelFormat」には「Bgr32」を指定し、「palette」には「Nothing」と指定しておきます。「PixelFormats.Bgr32」は、「Bgr32ピクセル形式」を取得します。 「Bgr32」は、ピクセルあたりのビット数 (BPP) が「32」の「sRGB 形式」です。 各カラーチャネル (青、緑、および赤) に割り当てられるピクセルあたりのビット数 (BPP) は「8」になります。
  5. AddHandlerステートメントで、ColorFrameReaderのFrameArrivedイベントに、イベントハンドラを指定します。FrameArrivedイベントは、カラーフレームが到着した時に発生するイベントです。
  6. OpenメソッドでKinectセンサーを開きます。
この記事のキーワード

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る