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 件のコメント:
コメントを投稿