Share via


.NET Gadgeteer - カメラ画像の表示

.NET Gadgeteerでカメラ画像をWPFのクラス群を使って、LCDに表示する方法を紹介します。ボードの構成は、

  • FEZ Spider
  • Display T35
  • Camera

を前提とします。

Gadgeteerの.NET Gadgeteer Applicationプロジェクトテンプレートを使ってプロジェクトを作成します。Program.csのProgramクラスのProgramStarted()メソッドの下に、以下のメソッドとメンバー変数を追加します。

        // カメラ画像をはめ込むRectangle
        Rectangle photoRect;
        // WPFでGUIを構成
        void SetupGUI()
        {
            display_T35.SimpleGraphics.AutoRedraw = true;
            display_T35.WPFWindow.Background = new SolidColorBrush(Colors.Black);

            var panel = new StackPanel();
            panel.Orientation = Orientation.Vertical;

            photoRect = new Rectangle(160, 120);
            panel.Children.Add(photoRect);

            display_T35.WPFWindow.Child = panel;
        }

WPFでDisplay_T35に画像を表示するための要素を組み立てています。

カメラ画像をキャプチャーするために以下のメソッドとメンバー変数を追加します。

        Bitmap cameraBitmap;
        void SetupCamera()
        {
            camera.BitmapStreamed += camera_BitmapStreamed;
            cameraBitmap = new Bitmap(camera.CurrentPictureResolution.Width,
                camera.CurrentPictureResolution.Height);
            camera.StartStreamingBitmaps(cameraBitmap);
        }

        // カメラ画像の準備ができたときにCallされる
        void camera_BitmapStreamed(Camera sender, Bitmap bitmap)
        {
            var brush = new ImageBrush(bitmap);
            photoRect.Fill = brush;
        }

何やってるかは一目瞭然。最初のメソッドでは、cameraの画像の準備ができたことを知らせるイベントにハンドラを登録し、カメラ画像と同サイズのBitmapを作成、画像取り込み開始をしています。
カメラ画像の準備ができたら、画像がBitmapで渡されるので、それを基にImageBrushを作成して、photoRect(四角)をFillします。

ProgramStated()メソッドに、SetupGUI()メソッドとSetupCamera()メソッドのコールを追加します。

            *******************************************************************************************/

            SetupGUI();
            SetupCamera();

            // Use Debug.Print to show messages in Visual Studio's "Output" window during debugging.
            Debug.Print("Program Started");
        }

これでコーディング完了。cameraが送ってくる画像のサイズは、Dispaly_T35のサイズと同じ320×240です。このコードでは、Rectangleのサイズがそれとは違うところがミソ。.NET Micro Framework側で自動的にサイズを合わせてくれます。
Dispaly_T35のSimpleGraphicsプロパティへのDisplayImage()メソッドでは、サイズを変えることはできないので、サイズをある程度自由に変えて表示したい場合にこの方法を活用してください。