private void ScanPreviewBuffer() { try { _photoCamera.GetPreviewBufferY(_luminance.PreviewBufferY); var binarizer = new HybridBinarizer(_luminance); var binBitmap = new BinaryBitmap(binarizer); Result result = _reader.decode(binBitmap); if (result != null) { _timer.Stop(); SetStillPicture(); BarCodeRectSuccess(); Dispatcher.BeginInvoke(() => { NavigationService.Navigate(new Uri("/BookDetailPanoramaPage.xaml?isbn=" + result.Text, UriKind.Relative)); }); } else { _photoCamera.Focus(); } } catch { } }
//オートフォーカスが完了したら呼び出される void camera_AutoFocusCompleted(object sender, CameraOperationCompletedEventArgs e) { //アマゾンからデータを取得するインスタンスにイベントハンドラを追加 //AmazonWebService aws = new AmazonWebService(); //aws.Comp += new AmazonWebService.GetItemInfoFromAmazonCompletedEventHandler(this.aws_GetItemInfoFromAmazonCompleted); //ItemData itemData = new ItemData(); //cameraインスタンスがnullの場合は即return。そうしないと下の「プレビューフレームの取得」でnullreferenceexceptionが出てしまう。readTimerとのタイミングの問題か? if (camera == null) { return; } // コントロールへのアクセスを行うのでUIスレッドにて非同期で実行。UIへのアクセスは別のスレッドからはできないため。 Dispatcher.BeginInvoke(() => { // プレビューフレームの取得 var luminanceSource = new PreviewFrameLuminanceSource((int)camera.PreviewResolution.Width, (int)camera.PreviewResolution.Height); camera.GetPreviewBufferY(luminanceSource.Buffer); // リーダーインスタンス生成 var reader = new EAN13Reader(); // バーコード解析用のBitmapを作成 var binarizer = new HybridBinarizer(luminanceSource); var binBitmap = new BinaryBitmap(binarizer); Result result = null; try { // バーコードの解析(デコード)を行う。 //resultにEANが入る。 result = reader.decode(binBitmap); } catch (ReaderException) { // プレビューフレーム内にバーコードが見つからなかった場合 // 読み取り例外のReaderExceptionが発行されてしまう TextBlock_Result.Text = "Can not read barcode."; return; } catch (Exception ex) { throw ex; } //読み取ったEANがデータベースに登録済みかチェック if (BookView.Exist(result.Text) != null) { //登録済みの場合 TextBlock_Result.Text = result.Text + " is exists"; } else { //未登録の場合。Amazonへリクエスト TargetEAN = result.Text; aws = new AmazonWebService(result.Text); //アマゾンからデータを取得するインスタンスにイベントハンドラを追加 aws.GetItemInfoFromAmazonCompleted += new AmazonWebService.GetItemInfoFromAmazonCompletedEventHandler(this.aws_GetItemInfoFromAmazonCompleted); aws.GetItemInfo(); } }); //イベントを削除 camera.AutoFocusCompleted -= camera_AutoFocusCompleted; }