• Windows phone 8 二维码生成与扫描


    1. 二维码的生成

      二维码生成用到了一个第三方的插件(zxing.wp8.0)

     

    根据指定的信息,生成对应的二维码。

    代码很简单:

                bool falg=tbk.Text==""?false:true;
                if (falg==false)
                {
                    MessageBox.Show("message lose, can't produce!");
                    return;
                }
                EncodingOptions options;//包含一些编码、大小等的设置
                BarcodeWriter write = null;//用来生成二维码,对应的BarcodeReader用来解码
                options = new QrCodeEncodingOptions
                {
                    DisableECI = true,
                    CharacterSet = "UTF-8",
                    Width = 300,
                    Height = 300,
                    Margin = 3
                };
                write = new BarcodeWriter();
                write.Format = BarcodeFormat.QR_CODE;
                write.Options = options;
               
                WriteableBitmap bitmap = write.Write(tbk.Text.Trim());
                imgCode.Source = bitmap;

    下面看下二维码的扫描(同样用的一个第三方的插件 Silverlight_ZXing_Core)

    直接上代码

     protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)        

    {            

               _reader = new QRCodeReader();                

                    _photoCamera = new PhotoCamera();                

          _photoCamera.Initialized += new EventHandler<CameraOperationCompletedEventArgs>(cam_Initialized);                 _videoBrush.SetSource(_photoCamera);                

           BarCodeRectInitial();                

           base.OnNavigatedTo(e);             

     }

    //释放资源

          protected override void OnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e)
            {
                if (_photoCamera != null)
                {
                    _timer.Stop();
                    _photoCamera.CancelFocus();
                    _photoCamera.Dispose();
                }
               
                base.OnNavigatingFrom(e);
            }

    //初始化

    void cam_Initialized(object sender, CameraOperationCompletedEventArgs e)
     {
                int width = Convert.ToInt32(_photoCamera.PreviewResolution.Width);
                int height = Convert.ToInt32(_photoCamera.PreviewResolution.Height);
                _luminance = new PhotoCameraLuminanceSource(width, height);
               
                Dispatcher.BeginInvoke(() =>
                {
                    _previewTransform.Rotation = _photoCamera.Orientation;
                    _timer.Start();
                });
                _photoCamera.FlashMode = FlashMode.Auto;
                _photoCamera.Focus();
    }

      

    public void SetStillPicture()        

    {            

         int width = Convert.ToInt32(_photoCamera.PreviewResolution.Width);          

            int height = Convert.ToInt32(_photoCamera.PreviewResolution.Height);            

        int[] PreviewBuffer = new int[width * height];            

         _photoCamera.GetPreviewBufferArgb32(PreviewBuffer);

                WriteableBitmap wb = new WriteableBitmap(width, height);            

        PreviewBuffer.CopyTo(wb.Pixels, 0);

                MemoryStream ms = new MemoryStream();            

        wb.SaveJpeg(ms, wb.PixelWidth, wb.PixelHeight, 0, 80);            

         ms.Seek(0, SeekOrigin.Begin);

                BitmapImage bi = new BitmapImage();            

         bi.SetSource(ms);            

        ImageBrush still = new ImageBrush();            

        still.ImageSource = bi;            

         frame.Fill = still;            

        still.RelativeTransform = new CompositeTransform()                 { CenterX = 0.5, CenterY = 0.5, Rotation = _photoCamera.Orientation };        

    }

     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(() =>                    

                 {                        

                    //读取成功,结果存放在result.Text                        

                     NavigationService.Navigate(new Uri("/ScanResult.xaml?result=" + result.Text, UriKind.Relative));

                             });                

              }                

             else                

             {                   

                 _photoCamera.Focus();                

             }            

           }            

           catch            

           {             }        

    }

  • 相关阅读:
    项目知识
    设计师如何为 Android 应用标注尺寸
    Android开发注意事项
    线程的同步和异步
    复习:IPC机制
    简单的Mvp设计
    泛型
    RxBus的使用
    LinearLayout遇到的问题——利用LinearLayout做横向滑动冲突
    Google搜索技巧、使用Google的其它专业搜索
  • 原文地址:https://www.cnblogs.com/xiaogui9527/p/3459415.html
Copyright © 2020-2023  润新知