2012年8月26日日曜日

KINECTサンプル(VB) RGBカメラ for SDK1.5

KINECTのサンプル VB版です。

C#と同じ内容です。

開発環境は

Windows7 Ultimate 64bit SP1
Visual Basic 2010 Express
KINECT SDK 1.5
KINECT for Windows

となります。

WPFアプリケーションです。

プロジェクトの参照の追加で「Microsoft.Kinect」を追加するようにしてください。


MainWindow.xaml
------------------------------------------------------------------------------

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="520" Width="700">
    <Grid>
        <Image Name="Rgb" Stretch="Uniform" Height="480" Width="640" />
    </Grid>
</Window>
------------------------------------------------------------------------------

C#とまったく同じです。イメージコントロールを1つ配置しています。


MainWindow.xaml.vb
------------------------------------------------------------------------------
Imports Microsoft.Kinect

Class MainWindow

    Inherits Window

    Private kinect As KinectSensor
    Private colorPixel As Byte()

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub New()

        ' この呼び出しはデザイナーで必要です。
        InitializeComponent()

        ' InitializeComponent() 呼び出しの後で初期化を追加します。

        ''接続の確認
        If KinectSensor.KinectSensors.Count = 0 Then
            MessageBox.Show("KINECTが見つかりません。")
            Exit Sub
        End If

    End Sub

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Window_Loaded(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded

        kinect = KinectSensor.KinectSensors(0)

        ''RGBデータ用配列の初期化
        colorPixel = New Byte(kinect.ColorStream.FramePixelDataLength - 1) {}

        ''RGBカメラの設定
        kinect.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30)

        ''イベントの登録
        AddHandler kinect.ColorFrameReady, AddressOf kinect_colorFrameReady

        ''KINECTのスタート
        kinect.Start()

    End Sub

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub kinect_colorFrameReady(ByVal sender As Object, ByVal e As ColorImageFrameReadyEventArgs)

        Using colorFrame As ColorImageFrame = e.OpenColorImageFrame
            If colorFrame Is Nothing = False Then

                colorFrame.CopyPixelDataTo(colorPixel)

                Rgb.Source = BitmapSource.Create(colorFrame.Width, colorFrame.Height, 96, 96, PixelFormats.Bgr32, Nothing, colorPixel, colorFrame.Width * colorFrame.BytesPerPixel)

            End If
        End Using

    End Sub
End Class
------------------------------------------------------------------------------

C#と比べてほとんど違いはありません。NullがNothingになるのをよく間違えますけど^^;

画像データを生成している箇所の説明を少しします。
イメージコントロールのソースを「BitmapSource.Create」で行っていますが、構文は

BitmapSource.Create( 
               画像の幅、
               画像の高さ、
               表示するDPIのX値(通常は96に固定)、
               表示するDPIのY値(通常は96に固定)、
               ビットマップのピクセル形式(BGR32が推奨?)、
               ビットマップのパレット(使わない?)、
               ビットマップを表すバイト配列(KINECTのRGBデータ)、
               ストライド(ビットマップの幅×1ピクセル当りのバイト数 32ビットなので4バイト)
               )

となります。

KINECTからのRGBデータ(バイト配列)を加工することによっていろいろな画像表示が可能になります。




0 件のコメント:

コメントを投稿