2012-08-15 102 views
0

我最近開始在windows上使用kinect,我是C#初學者,我希望你們中的任何人都能告訴我這個部分在冒號前後的意思是什麼--->「mainwindow:窗口「kinect基礎知識和C#

我無法弄清楚」intializeComponent()「在做什麼。即使當我評價它的代碼仍然能正常所以這是什麼實際上做,當我看着它的定義,按F12就帶我去了一個名爲新文件「mainwindow.g.cs

//------------------------------------------------------------------------------ 
// <copyright file="MainWindow.xaml.cs" company="Microsoft"> 
//  Copyright (c) Microsoft Corporation. All rights reserved. 
// </copyright> 
//------------------------------------------------------------------------------ 

namespace Microsoft.Samples.Kinect.ColorBasics 
{ 
    using System; 
    using System.Globalization; 
    using System.IO; 
    using System.Windows; 
    using System.Windows.Media; 
    using System.Windows.Media.Imaging; 
    using Microsoft.Kinect; 

    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     /// <summary> 
     /// Active Kinect sensor 
    /// </summary> 
    private KinectSensor sensor; 

    /// <summary> 
    /// Bitmap that will hold color information 
    /// </summary> 
    private WriteableBitmap colorBitmap; 

    /// <summary> 
    /// Intermediate storage for the color data received from the camera 
    /// </summary> 
    private byte[] colorPixels; 

    /// <summary> 
    /// Initializes a new instance of the MainWindow class. 
    /// </summary> 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    /// <summary> 
    /// Execute startup tasks 
    /// </summary> 
    /// <param name="sender">object sending the event</param> 
    /// <param name="e">event arguments</param> 
    private void WindowLoaded(object sender, RoutedEventArgs e) 
    { 
     // Look through all sensors and start the first connected one. 
     // This requires that a Kinect is connected at the time of app startup. 
     // To make your app robust against plug/unplug, 
     // it is recommended to use KinectSensorChooser provided in Microsoft.Kinect.Toolkit 
     foreach (var potentialSensor in KinectSensor.KinectSensors) 
     { 
      if (potentialSensor.Status == KinectStatus.Connected) 
      { 
       this.sensor = potentialSensor; 
       break; 
      } 
     } 

     if (null != this.sensor) 
     { 
      // Turn on the color stream to receive color frames 
      this.sensor.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30); 

      // Allocate space to put the pixels we'll receive 
      this.colorPixels = new byte[this.sensor.ColorStream.FramePixelDataLength]; 

      // This is the bitmap we'll display on-screen 
      this.colorBitmap = new WriteableBitmap(this.sensor.ColorStream.FrameWidth, this.sensor.ColorStream.FrameHeight, 96.0, 96.0, PixelFormats.Bgr32, null); 

      // Set the image we display to point to the bitmap where we'll put the image data 
      this.Image.Source = this.colorBitmap; 

      // Add an event handler to be called whenever there is new color frame data 
      this.sensor.ColorFrameReady += this.SensorColorFrameReady; 

      // Start the sensor! 
      try 
      { 
       this.sensor.Start(); 
      } 
      catch (IOException) 
      { 
       this.sensor = null; 
      } 
     } 

     if (null == this.sensor) 
     { 
      this.statusBarText.Text = Properties.Resources.NoKinectReady; 
     } 
    } 

    /// <summary> 
    /// Execute shutdown tasks 
    /// </summary> 
    /// <param name="sender">object sending the event</param> 
    /// <param name="e">event arguments</param> 
    private void WindowClosing(object sender, System.ComponentModel.CancelEventArgs e) 
    { 
     if (null != this.sensor) 
     { 
      this.sensor.Stop(); 
     } 
    } 

    /// <summary> 
    /// Event handler for Kinect sensor's ColorFrameReady event 
    /// </summary> 
    /// <param name="sender">object sending the event</param> 
    /// <param name="e">event arguments</param> 
    private void SensorColorFrameReady(object sender, ColorImageFrameReadyEventArgs e) 
    { 
     using (ColorImageFrame colorFrame = e.OpenColorImageFrame()) 
     { 
      if (colorFrame != null) 
      { 
       // Copy the pixel data from the image to a temporary array 
       colorFrame.CopyPixelDataTo(this.colorPixels); 

       // Write the pixel data into our bitmap 
       this.colorBitmap.WritePixels(
        new Int32Rect(0, 0, this.colorBitmap.PixelWidth, this.colorBitmap.PixelHeight), 
        this.colorPixels, 
        this.colorBitmap.PixelWidth * sizeof(int), 
        0); 
      } 
     } 
    } 

    /// <summary> 
    /// Handles the user clicking on the screenshot button 
    /// </summary> 
    /// <param name="sender">object sending the event</param> 
    /// <param name="e">event arguments</param> 
    private void ButtonScreenshotClick(object sender, RoutedEventArgs e) 
    { 
     if (null == this.sensor) 
     { 
      this.statusBarText.Text = Properties.Resources.ConnectDeviceFirst; 
      return; 
     } 

     // create a png bitmap encoder which knows how to save a .png file 
     BitmapEncoder encoder = new PngBitmapEncoder(); 

     // create frame from the writable bitmap and add to encoder 
     encoder.Frames.Add(BitmapFrame.Create(this.colorBitmap)); 

     string time = System.DateTime.Now.ToString("hh'-'mm'-'ss", CultureInfo.CurrentUICulture.DateTimeFormat); 

     string myPhotos = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures); 

     string path = Path.Combine(myPhotos, "KinectSnapshot-" + time + ".png"); 

     // write the new file to disk 
     try 
     { 
      using (FileStream fs = new FileStream(path, FileMode.Create)) 
      { 
       encoder.Save(fs); 
      } 

      this.statusBarText.Text = string.Format("{0} {1}", Properties.Resources.ScreenshotWriteSuccess, path); 
     } 
     catch (IOException) 
     { 
      this.statusBarText.Text = string.Format("{0} {1}", Properties.Resources.ScreenshotWriteFailed, path); 
     } 
    } 

    private void Image_ImageFailed(object sender, ExceptionRoutedEventArgs e) 
    { 

    } 
} 
} 
+0

可能重複的是什麼InitializeComponent()做什麼,它是如何工作的? (WPF)](http://stackoverflow.com/questions/245825/what-does-initializecomponent-do-and-how-does-it-work-wpf) – 2012-08-15 12:27:57

+0

@Erno op有另一個問題 – 2012-08-15 12:28:35

+0

@ DanielA.White - 歸結爲「什麼是InitializeComponent?」無論如何,如果他們同意或不同意,他人可以投票。 – 2012-08-15 12:36:18

回答

0

這ISN 「T具體到Kinect的,但您有問題的C#的東西。

如果你的問題是圍繞MainWindow : Window,那是你的類被稱爲MainWindow和冒號表示inheritance in C#。也就是說,MainWindow是的子類(或繼承)Window

至於InitializeComponent看看這裏的答案:https://stackoverflow.com/a/245881/23528