カテゴリー別アーカイブ: 未分類

Xamarin.Formsでカメラを使う – Windows Phone 8編

| | 未分類

XAML Advent Calender 2014 12日目の記事です。

Advent Calenderで連載物なんて載せちゃって怒られそうな気がしなくもなくなくないですが、今回は前回「Xamarin.Formsでカメラを使う – Android編」に引き続きXamarin.FormsでWindows Phone 8のカメラを使う方法をご紹介します。
恐縮ですが、この記事を読む前に前回の記事をお読みください。

なおサンプルプログラムをGithubで公開しています。
完全なコードは、こちらをご覧ください。

準備

まずCustomeRendererとCameraPreviewクラスを前回の記事に従い、PCLプロジェクトに作成します。

WP8用プロジェクトでの実装

WP8用のプロジェクトでは、WP8に特化したViewRendererのサブクラスを作成します。

Xamarin.Forms.dllの更新

前回の記事にも書いたように、Generic版のViewRendererを利用するため、WP8のプロジェクトで参照しているXamarin.Forms.dllをVersion 1.2.2.*以降にアップデートする必要があります。
NuGetパッケージマネージャから更新しましょう。
xamarin.forms_update

カスタムレンダラの実装

Xamarin.Forms.Platform.WinPhone.ViewRendererクラスを継承した、CameraPreviewRendererクラスを作成します。

TViewにはPCL内で定義したCameraPreviewクラス、TNativeViewにはカスタムレンダラで実際に表示させるプラットフォーム固有のViewを指定します。
今回はContentControlをこのNativeViewとし、その中にViewBoxコントロール,Canvasコントロールを配置し、Canvasコントロールに映し出したカメラのプレビュー画像を自動でリサイズできるように実装します。
XAMLで書くとこんな感じです。

ViewBoxの外側にContentControlを置いておかないとViewBoxのリサイズがうまく働かないので注意してください。

XAML Advent CalenderらしくこのコントロールをXAMLで書くのもいいかとは思うのですが、今回は簡略化のためcsのコードのみで実装します。

コントロールが初期化されるタイミングでCameraを初期化し、CameraPreviewクラスより写真撮影要求が発行されたときに写真撮影命令を発行、写真撮影が完了したらCameraPreviewのOnPictureTaken()を呼び出しその旨を通知しています。
ViewRenderer.LoadedイベントとViewRenderer.Unloadedイベントがポイントで、このタイミングでCameraの初期化・破棄を行うことで、Xamarin.FormsのViewのライフサイクルに合わせたリソースの取得・確保ができます。

カスタムレンダラのExport

カスタムレンダラを実装したら、Xamarin.Forms.ExportRendererAttribute 属性を用いて作成したカスタムレンダラをExportします。
前回と同じく、以下の一行をコードの先頭部分などに記述するだけです。

これで、カスタムレンダラの実装は完了です。

カスタムレンダラを利用する。

作成したカスタムレンダラを利用してカメラのプレビューを表示させるのですが、実はこの時点で前回作成したPLCプロジェクトを全く変更せず、WP8においてもカメラプレビューを表示できます。

動作確認

実際にアプリケーションを動かして動作を確認してみましょう。

WP8のエミュレータ上でアプリケーションを起動すると、次のようにプレビューが表示されます。
WP_capture

TakePictureボタンをタップするとその場で写真が撮影され、以下の撮影写真プレビュー画面へ遷移します。
WP_capture_taken

正常に写真が撮影され、画像として取得できていることが確認できました。


前回に引き続きXamarin.Formsを利用しWindows Phone 8でカメラプレビュー画像を表示しました。
本記事ではWindows Phone 8用プロジェクトにWindows Phone 8用のCameraPreviewRendererを実装したのみで、PLCプロジェクトは前回と全く同じ物を利用しています。
このあたりはCustom Rendererの高い抽象度とその利便性がわかります。Xamarin.Forms万歳です。直接WinRT叩けよという異論は認めます。

おはようございました

| | 未分類

コミケ共同購入システムの開発記録やスタジオ大破のサークルに関する情報を気軽における場所が欲しくてブログを作ってみました。
あまり頻繁に更新する自信はありませんが、コミケで出す作品や開発日記、艦ぶらなどの情報とかをのせて行こうかと思います。

…あとオナホ日記とかも(?)