Esempio n. 1
0
        /// <summary>
        /// Returns the zxing reader class for the current specified ScanMode.
        /// </summary>
        /// <returns></returns>
        internal static com.google.zxing.Reader GetReader(BarcodeFormat format)
        {
            Dictionary <object, object> zxingHints
                = new Dictionary <object, object>()
                {
                { DecodeHintType.TRY_HARDER, true }
                };

            com.google.zxing.Reader r;
            switch (format.Name)
            {
            case "CODE_128":
                r = new com.google.zxing.oned.Code128Reader();
                break;

            case "CODE_39":
                r = new com.google.zxing.oned.Code39Reader();
                break;

            case "EAN_13":
                r = new com.google.zxing.oned.EAN13Reader();
                break;

            case "EAN_8":
                r = new com.google.zxing.oned.EAN8Reader();
                break;

            case "ITF":
                r = new com.google.zxing.oned.ITFReader();
                break;

            case "UPC_A":
                r = new com.google.zxing.oned.UPCAReader();
                break;

            case "UPC_E":
                r = new com.google.zxing.oned.UPCEReader();
                break;

            case "QR_CODE":
                r = new com.google.zxing.qrcode.QRCodeReader();
                break;

            case "DATAMATRIX":
                r = new com.google.zxing.datamatrix.DataMatrixReader();
                break;

            case "ALL_1D":
                r = new com.google.zxing.oned.MultiFormatOneDReader(zxingHints);
                break;

            //Auto-Detect:
            case "UPC_EAN":
            default:
                r = new com.google.zxing.oned.MultiFormatUPCEANReader(zxingHints);
                break;
            }
            return(r);
        }
Esempio n. 2
0
        public void StopWorker()
        {
            // starting timer
            if (WorkerTimer != null)
            {
                WorkerTimer.Invalidate();
                WorkerTimer.Dispose();
                WorkerTimer = null;
                NSRunLoop.Current.Dispose();
            }

            //Just in case
            _multiFormatOneDReader = null;
            hints = null;
        }
Esempio n. 3
0
        /// <summary>
        /// Returns the zxing reader class for the current specified ScanMode.
        /// </summary>
        /// <returns></returns>
        internal static com.google.zxing.Reader GetReader(BarcodeFormat format)
        {
            Dictionary<object, object> zxingHints
                = new Dictionary<object, object>() { { DecodeHintType.TRY_HARDER, true } };
            com.google.zxing.Reader r;
            switch (format.Name)
            {
                case "CODE_128":
                    r = new com.google.zxing.oned.Code128Reader();
                    break;
                case "CODE_39":
                    r = new com.google.zxing.oned.Code39Reader();
                    break;
                case "EAN_13":
                    r = new com.google.zxing.oned.EAN13Reader();
                    break;
                case "EAN_8":
                    r = new com.google.zxing.oned.EAN8Reader();
                    break;
                case "ITF":
                    r = new com.google.zxing.oned.ITFReader();
                    break;
                case "UPC_A":
                    r = new com.google.zxing.oned.UPCAReader();
                    break;
                case "UPC_E":
                    r = new com.google.zxing.oned.UPCEReader();
                    break;
                case "QR_CODE":
                    r = new com.google.zxing.qrcode.QRCodeReader();
                    break;
                case "DATAMATRIX":
                    r = new com.google.zxing.datamatrix.DataMatrixReader();
                    break;

                case "ALL_1D":
                    r = new com.google.zxing.oned.MultiFormatOneDReader(zxingHints);
                    break;
                
                //Auto-Detect:
                case "UPC_EAN":
                default:
                    r = new com.google.zxing.oned.MultiFormatUPCEANReader(zxingHints);
                    break; 
            }
            return r;
        }
Esempio n. 4
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;
                    }
                }
            }
        }
        private void Worker()
        {
            float fY1;
                float fY2;

                float scale;

                // calculate picFrame just once
                if (picFrame == RectangleF.Empty)
                {

                    // check if device has retina display, if so scale factor by 2
                    if (UIScreen.MainScreen.RespondsToSelector(new MonoTouch.ObjCRuntime.Selector(@"scale")) &&
                        UIScreen.MainScreen.Scale == 2)
                        scale = 2f;
                    else
                        scale = 1f;

                    // check if the device is an ipad or an iphone
                    if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Phone)
                    {
                        fY1 = 146f / UIScreen.MainScreen.Bounds.Height * scale;
                        fY2 = 157f / UIScreen.MainScreen.Bounds.Height * scale;
                    }
                    else
                    {
                        // ipad - constants probably need to be modified if running at native screen res

                        fY1 = 146f / UIScreen.MainScreen.Bounds.Height * scale;
                        fY2 = 157f / UIScreen.MainScreen.Bounds.Height * scale;
                    }

                    picFrame = new RectangleF(0, UIScreen.MainScreen.Bounds.Height * fY1, UIScreen.MainScreen.Bounds.Width * scale, UIScreen.MainScreen.Bounds.Height * fY2);
                }

                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;

                    }

                }
        }
        public void StopWorker()
        {
            // starting timer
            if (WorkerTimer != null)
            {
                WorkerTimer.Invalidate();
                WorkerTimer.Dispose();
                WorkerTimer = null;
                NSRunLoop.Current.Dispose();
            }

            //Just in case
            _multiFormatOneDReader = null;
            hints = null;
        }
        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;

                    }

                }
        }
Esempio n. 8
0
        /// <summary>
        /// Returns the zxing reader class for the current specified ScanMode.
        /// </summary>
        /// <returns></returns>
        public static com.google.zxing.Reader GetReader()
        {
            com.google.zxing.Reader r;
            switch (WP7BarcodeManager.ScanMode.Name)
            {
                case "CODE_128":
                    r  = new com.google.zxing.oned.Code128Reader();
                    break;
                case "CODE_39":
                    r  = new com.google.zxing.oned.Code39Reader();
                    break;
                case "EAN_13":
                    r  = new com.google.zxing.oned.EAN13Reader();
                    break;
                case "EAN_8":
                    r  = new com.google.zxing.oned.EAN8Reader();
                    break;
                case "ITF":
                    r  = new com.google.zxing.oned.ITFReader();
                    break;
                case "UPC_A":
                    r  = new com.google.zxing.oned.UPCAReader();
                    break;
                case "UPC_E":
                    r  = new com.google.zxing.oned.UPCEReader();
                    break;
                case "QR_CODE":
                    r  = new com.google.zxing.qrcode.QRCodeReader();
                    break;
                case "DATAMATRIX":
                    r  = new com.google.zxing.datamatrix.DataMatrixReader();
                    break;

                //Auto-Detect:
                case "UPC_EAN":
                    r = new com.google.zxing.oned.MultiFormatUPCEANReader(zxingHints);
                    break;
                case "ALL_1D":
                    r = new com.google.zxing.oned.MultiFormatOneDReader(zxingHints);
                    break;

                default:
                    r = null;
                    if (LastCaptureResults != null)
                    {
                        LastCaptureResults.ExceptionThrown = new ArgumentException("Error: Unknown barcode type");
                    }
                    throw new ArgumentException("Error: Unknown barcode type");
            }
            return r;
        }