示例#1
0
 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;
        }