//识别二维码 public bool DoCheckTicket(ref string strQrCode) { DataTickCam data = new DataTickCam(); if (!mainWin.CapTicket(data)) { return(false); } strQrCode = string.Empty; using (Bitmap bmGray = WinCall.BitmapConvetGray(data.bm)) { //垂直翻转 bmGray.RotateFlip(RotateFlipType.Rotate90FlipX); using (ImageScanner scanner = new ImageScanner()) { scanner.SetConfiguration(SymbolType.None, Config.Enable, 1); List <Symbol> symbols = scanner.Scan(bmGray); WinCall.TraceMessage(string.Format("***Ticket syms={0}", symbols.Count)); //! for test foreach (var sym in symbols) { var symType = sym.GetType(); if (!string.IsNullOrEmpty(sym.Data)) { strQrCode = sym.Data; break; //只取一个结果 } } } } data.bm.Dispose(); return(false == string.IsNullOrEmpty(strQrCode)); }
public void ConvertAndScanBMP() { System.Drawing.Image img = System.Drawing.Image.FromFile("images/barcode.bmp"); ImageScanner scanner = new ImageScanner(); List <Symbol> symbols = scanner.Scan(img); Assert.AreEqual(1, symbols.Count, "Didn't find the symbols"); Assert.IsTrue(SymbolType.EAN13 == symbols[0].Type, "Didn't get the barcode type right"); Assert.AreEqual("0123456789012", symbols[0].Data, "Didn't read the correct barcode"); }
/// <summary> 检查图片中存在的商品条码 /// </summary> /// <param name="ScreenShot">摄像头截图</param> /// <returns>返回 String:条码值 null:图片中不存在条码</returns> public String CheckBarCode(Bitmap ScreenShot) { Result barcode_ZXing = CodeReader.Decode(ScreenShot);//使用ZXing解码 if (barcode_ZXing == null) { //若ZXing没有识别出条码 List <Symbol> barcode_ZBar = CodeReader_2.Scan(ScreenShot); //使用ZBar解码 if (barcode_ZBar == null || barcode_ZBar.Count == 0) { return(null);//若条码为空则返回空 } else { return(barcode_ZBar[0].Data);//返回ZBar识别出的结果 } } return(barcode_ZXing.Text);//返回条码对应字符串 }
public static string GetBarcode_ZBAR(string fileName) { string text; using (var img = new Bitmap(fileName)) { text = ""; if (img.Width > 0 && img.Height > 0) { System.Drawing.Image oBitmap = System.Drawing.Image.FromFile(fileName); ImageScanner oImageScanner = new ImageScanner(); var symbols = oImageScanner.Scan(oBitmap); if (symbols.Count > 0) { text = symbols[0].ToString(); text = text.Substring(8); } } } return(text); }
/// <summary> /// Detecta múltiples tags en una imagen /// </summary> /// <param name="image">Imagen a procesar</param> /// <param name="showProcessedInput">Si se fija a true se muestra el resultado del procesamiento previo que /// se realiza antes del proceso de detección de tags</param> /// <returns>Lista de tags</returns> public static List <Tag> detectTags(System.Drawing.Image image, bool showProcessedInput = false) { List <Tag> result = new List <Tag>(); // Procesamos la imagen de entrada using (System.Drawing.Image img = image)//prepareInput(image, showProcessedInput)) { using (ImageScanner scanner = new ImageScanner()) { List <Symbol> symbols = scanner.Scan(img); if (symbols != null && symbols.Count > 0) { // Iteramos los resultados y los transformamos a objetos Tag foreach (Symbol symbol in symbols) { result.Add(new Tag(symbol)); } } } } return(result); }
public void ScanCode(System.Drawing.Image image) { ZBar.ImageScanner scanner = new ImageScanner(); scanner.Scan(image); List <ZBar.Symbol> symbols = new List <Symbol>(); ZXing.OneD.Code93Reader reader3 = new ZXing.OneD.Code93Reader(); reader.ResultFound += Reader_ResultFound; if (symbols != null && symbols.Count > 0) { string r = string.Empty; foreach (var s in symbols) { textBox1.Text = s.Data; } } //ZBar.ImageScanner scanner= new ImageScanner(); //scanner.SetConfiguration(ZBar.SymbolType.None, ZBar.Config.Enable, 0); //scanner.SetConfiguration(ZBar.SymbolType.CODE39, ZBar.Config.Enable, 1); //scanner.SetConfiguration(ZBar.SymbolType.CODE128, ZBar.Config.Enable, 1); //List<ZBar.Symbol> symbols = new List<Symbol>(); //symbols = scanner.Scan(image); //if (symbols!=null&&symbols.Count>0) { // string result = string.Empty; // foreach (var s in symbols) { // textBox1.Text=s.Data; // } //} Result result = reader.Decode((Bitmap)image); foreach (var point in result.ResultPoints) { Bitmap bitmap = new Bitmap(image); // panel1.DrawToBitmap(bitmap, new Rectangle(new Point((int)point.X,(int)point.Y), new Size(result.))); panel1.BackgroundImage = bitmap; } textBox1.Text = result.Text; }
/// <summary> /// Capture and scan images /// </summary> /// <remarks> /// This method will also flip the images so that they need not be flipped when drawing. /// </remarks> private void CaptureVideo(Video video, ImageScanner scanner) { while (true) { using (ZBar.Image frame = video.NextFrame()){ using (ZBar.Image bwImg = frame.Convert(0x30303859)){ //Scan the image for bar codes scanner.Scan(bwImg); //Get the data, width, height and symboles for the image byte[] data = bwImg.Data; int w = (int)bwImg.Width; int h = (int)bwImg.Height; var symbols = new List <Symbol> (bwImg.Symbols); // Resize // number of pixels to shift in the original image double stepX = (double)w / AllocatedWidth; double stepY = (double)h / AllocatedHeight; // don't do enlarging if (stepX <= 1 && stepY <= 1) { return; } double smallestStep = Math.Max(stepX, stepY); stepX = stepY = smallestStep; int maxHeight = (int)((double)h / smallestStep); int maxWidth = (int)((double)w / smallestStep); int newPixels = maxWidth * maxHeight; byte[] resizedFrame = new byte[newPixels]; double sX = 0, sY = 0; int i; for (int j = 0; j < newPixels; j++) { i = (int)sX + (int)((int)sY * w); // stop exceptions if (i >= data.Length) { Console.WriteLine("Trying to access {0} on the old frame, up to {1} on new frame", i, j); break; } resizedFrame[j] = data[i]; sX += stepX; if ((j + 1) % maxWidth == 0) { sY += stepY; sX = 0; } } w = maxWidth; h = maxHeight; data = resizedFrame; //Flip the image vertically, if needed if (this.Flip) { for (int ih = 0; ih < h; ih++) { for (int iw = 0; iw < w / 2; iw++) { //TODO: The offsets below could be computed more efficiently, but I don't care this happens on a thread... :) int p1 = w * ih + iw; int p2 = w * ih + (w - iw - 1); //Swap bytes: byte b1 = data[p1]; data[p1] = data[p2]; data[p2] = b1; } } } if (Rotate) { int l = data.Length - 1; for (int p = 0; p < data.Length / 2; p++) { //Swap bytes: var j = l - p; byte b1 = data[j]; data[j] = data[p]; data[p] = b1; } } //Lock the drawing process and pass it the data we aquired lock (this.drawLock){ this.toDraw = data; this.toDrawWidth = w; this.toDrawHeight = h; this.symbols = symbols; } this.ThreadSafeRedraw(); } } } }