コード例 #1
0
        //识别二维码
        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));
        }
コード例 #2
0
        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");
        }
コード例 #3
0
        /// <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);//返回条码对应字符串
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
        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;
        }
コード例 #7
0
        /// <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();
                    }
                }
            }
        }