/// <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); }
public void StopWorker() { // starting timer if (WorkerTimer != null) { WorkerTimer.Invalidate(); WorkerTimer.Dispose(); WorkerTimer = null; NSRunLoop.Current.Dispose(); } //Just in case _multiFormatOneDReader = null; hints = null; }
/// <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; }
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; } } }
/// <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; }