zoukankan      html  css  js  c++  java
  • 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            

           {             }        

    }

  • 相关阅读:
    JfreeChart折线图 CSDN-李鹏飞
    [2012山东省第三届ACM大学生程序设计竞赛]——Mine Number
    两个对象值同样(x.equals(y) == true),但却可有不同的hash code,这句话对不正确?
    EBS TimeZone问题
    json数据转化成实体 存到数据库.
    写给大一大二大三还在迷惘中的学生
    Xamarin中Unsupported major.minor version 52.0问题解决
    解决Xamarin Android SDK Manager闪退问题
    Xamarin Forms启动自带模拟器缓慢
    Xamarin Android SDK无法更新的解决办法
  • 原文地址:https://www.cnblogs.com/xiaogui9527/p/3459415.html
Copyright © 2011-2022 走看看