BarCodeScanned() public method

public BarCodeScanned ( Result result ) : void
result Result
return void
Beispiel #1
0
        private void Worker()
        {
            //iphone 4 : 960 x 640
            //iphone 3 : 320 x 480
            if (DeviceHardware.Version == DeviceHardware.HardwareVersion.iPhone4)
            {
                picFrame = new RectangleF(0, 146 * 2, 320 * 2, 157 * 2);
            }

            if (hints == null)
            {
                var list = new ArrayList();
                list.Add(com.google.zxing.BarcodeFormat.EAN_8);
                list.Add(com.google.zxing.BarcodeFormat.EAN_13);

                hints = new Hashtable();
                hints.Add(com.google.zxing.DecodeHintType.POSSIBLE_FORMATS, list);
                hints.Add(com.google.zxing.DecodeHintType.NEED_RESULT_POINT_CALLBACK, new ResultCallBack(this));
            }

            if (_multiFormatOneDReader == null)
            {
                _multiFormatOneDReader = new com.google.zxing.oned.MultiFormatOneDReader(hints);
            }


            // Capturing screen image
            using (var screenImage = CGImage.ScreenImage.WithImageInRect(picFrame))
            {
                _theScreenImage = UIImage.FromImage(screenImage);
                Bitmap          srcbitmap = new System.Drawing.Bitmap(_theScreenImage);
                LuminanceSource source    = null;
                BinaryBitmap    bitmap    = null;
                try {
                    source = new RGBLuminanceSource(srcbitmap, screenImage.Width, screenImage.Height);
                    bitmap = new BinaryBitmap(new HybridBinarizer(source));

                    com.google.zxing.common.BitArray row = new com.google.zxing.common.BitArray(screenImage.Width);
                    int middle  = screenImage.Height >> 1;
                    int rowStep = System.Math.Max(1, screenImage.Height >> (4));

                    for (int x = 0; x < 9; x++)
                    {
                        // Scanning from the middle out. Determine which row we're looking at next:
                        int  rowStepsAboveOrBelow = (x + 1) >> 1;
                        bool isAbove   = (x & 0x01) == 0;                               // i.e. is x even?
                        int  rowNumber = middle + rowStep * (isAbove?rowStepsAboveOrBelow:-rowStepsAboveOrBelow);
                        if (rowNumber < 0 || rowNumber >= screenImage.Height)
                        {
                            // Oops, if we run off the top or bottom, stop
                            break;
                        }

                        // Estimate black point for this row and load it:
                        try
                        {
                            row = bitmap.getBlackRow(rowNumber, row);

                            var resultb = _multiFormatOneDReader.decodeRow(rowNumber, row, hints);
                            if (resultb.Text != null)
                            {
                                BeepOrVibrate();
                                _parentViewController.BarCodeScanned(resultb);


                                break;
                            }
                            else
                            {
                                continue;
                            }
                        }
                        catch (ReaderException re)
                        {
                            continue;
                        }
                    }



                    //					var result = _barcodeReader.decodeWithState(bitmap);
                    //
                    //					if(result.Text!=null)
                    //					{
                    //						_multiFormatOneDReader = null;
                    //						BeepOrVibrate();
                    //						_parentViewController.BarCodeScanned(result);
                    //					}
                } catch (Exception ex) {
                    Console.WriteLine(ex.Message);
                }
                finally {
                    if (bitmap != null)
                    {
                        bitmap = null;
                    }

                    if (source != null)
                    {
                        source = null;
                    }

                    if (srcbitmap != null)
                    {
                        srcbitmap = null;
                    }
                }
            }
        }