PhotoCameraを使ってみる

<はじめに>
スマホアプリにカメラは外せないので調べてみました。写真を撮ってカメラロールに保存するだけの簡単なプログラムを書いてみました。


<プログラム>

public partial class MainPage : PhoneApplicationPage
{
    //-----------------------------------
    // インスタンス変数
    //
    int photoCounter = 0;
    PhotoCamera photoCamera;
    MediaLibrary mediaLibrary;

    //-----------------------------------
    // コンストラクタ
    //
    public MainPage()
    {
        InitializeComponent();
        InitializePhotoCamera();
        InitializeMediaLibrary();
    }

    //-----------------------------------
    // photoCamera初期化
    //
    public void InitializePhotoCamera()
    {
        photoCamera = new PhotoCamera(Microsoft.Devices.CameraType.FrontFacing);

        viewfinderBrush.SetSource(photoCamera);

        photoCamera.CaptureImageAvailable += new EventHandler<ContentReadyEventArgs>(photoCamera_CaptureImageAvailable);
    }

    //-----------------------------------
    // mediaLibrary初期化
    //
    private void InitializeMediaLibrary()
    {
        mediaLibrary = new MediaLibrary();
    }

    //-----------------------------------
    // キャンバスをタップ
    //
    private void canvas1_Tap(object sender, GestureEventArgs e)
    {
        try
        {
            photoCamera.CaptureImage();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    //-----------------------------------
    // イメージの取得
    //
    void photoCamera_CaptureImageAvailable(object sender, ContentReadyEventArgs e)
    {
        try
        {
            photoCounter++;

            string fileName = photoCounter + ".jpg";

            mediaLibrary.SavePictureToCameraRoll(fileName, e.ImageStream);

        }
        catch (Exception ex)
        {
            Dispatcher.BeginInvoke(() => MessageBox.Show(ex.Message));
        }
    }
}


<まとめ>
やってることはphotoCameraのインスタンスを生成して、CaptureImageAvailableイベントに画像を保存するメソッドを定義して、photoCameraのCaptureImageメソッドを呼び出しているだけです。ただし、これだけだとカメラで取得した画像の上下がわけわかんなくなってしまうので、WP自体の回転に応じて画面も回転させてやらないといけません。