示例#1
0
        //-------------------------------------------------------------------------
        private void DoWork(object sender, DoWorkEventArgs e)
        {
            if (e.Argument != null)
            {
                var obj = e.Argument as string[];
                if (obj != null)
                {
                    string key = obj.First();
                    string qrCodeText;
                    if (obj.Length == 2)
                        qrCodeText = obj[1];
                    else
                        qrCodeText = "";
                    if (ShetIdManualySet && key == "RecAll")
                    {
                        key = "RecAllAlignmentOnly";
                    }

                    switch (key)
                    {
                        case "new Recognize":
                            Status = StatusMessage.NULL;
                            isInvert = false;
                            isRotate = false;
                            isCut = false;
                            isClear = false;
                            usedPrevTool = false;
                            ShetIdManualySet = false;
                            string fileName = obj.Last();
                            rec = new Recognize(fileName, defaults, cancelSource.Token);
                            rec.BubbleItems = new ObservableCollection<BubbleItem>();
                            errList.Clear();
                            if (rec != null && rec.Audit != null && !string.IsNullOrEmpty(rec.Audit.error))
                            {
                                Invoke(new MethodInvoker(delegate
                                {
                                    lblErr.Text = rec.Audit.error;
                                    errList.Add(rec.Audit.error);
                                    lblErr.Visible = true;
                                }));
                            }
                            recBitmap = (Bitmap)rec.Bitmap.Clone();
                            Invoke(new MethodInvoker(delegate
                                {
                                    BoxSheet.SelectedIndex = -1;
                                }));
                            break;

                        case "RecAll":
                            //Invoke(new MethodInvoker(delegate
                            //    {
                            //        BoxSheet.SelectedIndex = -1;
                            //    }));

                            if (string.IsNullOrEmpty(obj.Last()) && !string.IsNullOrEmpty(lastSheetId))
                            {
                                rec.RecAll(lastSheetId, false, ref qrCodeText, isRotate, isCut, ShetIdManualySet);
                            }
                            else
                            {
                                rec.RecAll(obj.Last(), false, ref qrCodeText, isRotate);
                            }
                            if (rec.cancellationToken.IsCancellationRequested)
                                Invoke(new MethodInvoker(delegate
                                    {
                                        if (!isRotate)
                                            btnRestore_Click(null, null);
                                    }));
                            break;
                        case "RecAllAlignmentOnly":
                            rec.RecAll(obj.Last(), true, ref qrCodeText, isRotate, isCut, ShetIdManualySet);
                            break;
                        case "SelectedSheetIdentifier":
                            rec.SelectedSheetIdentifier(obj.Last(), ref qrCodeText, isRotate, isCut, ShetIdManualySet);
                            break;
                        case "BarcodesRecognition":
                            rec.BarcodesRecognition(qrCodeText);
                            break;
                        case "BubblesRecognition":
                            CreateEtalonAreas();
                            GetAreasSettings();
                            if (!string.IsNullOrEmpty(rec.Audit.error) && rec.Audit.error.StartsWith("Calibration"))
                            {
                                //if (rpf != null && rpf.Disposing)
                                //CloseProcessingForm();
                                rec.Audit.error = "";
                                Invoke(new MethodInvoker(delegate
                                {
                                    rbtnGrid.PerformClick();
                                }));
                                break;
                            }
                            if (rec.bubbles_per_lineErr)
                            {
                                if (rpf != null && rpf.Disposing)
                                    CloseProcessingForm();
                                MessageBox.Show("Please, specify correctly the bubbles per line"
                                , Text, MessageBoxButtons.OK, MessageBoxIcon.Stop);
                                break;
                            }
                            else// (!rec.bubbles_per_lineErr)
                                rec.RecAndFindBubble();
                            break;
                        case "BubblesRecognition2":
                            rec.Exception = null;
                            rec.BarCodesPrompt = "";
                            //rec.Status = RecognizeAction.SearchBublesFinished;
                            //var maxCountRectangles = rec.AddMaxCountRectangles();
                            //rec.BubblesRecognition();
                            int deltaX = 0;
                            //if (rec.bubbles_per_lineFLEX != 5)
                            //{
                            //    deltaX = 0;
                            //}

                            recTools.BubblesRecognize
                            (
                              ref rec.allContourMultiLine
                            , ref rec.factRectangle
                            , rec.Bitmap
                            , ref barCodesPrompt
                            , rec.filterType
                            , rec.defaults.SmartResize
                            , rec.bubblesRegions
                            , rec.bubblesOfRegion
                            , rec.bubblesSubLinesCount
                            , rec.bubblesSubLinesStep
                            , rec.bubblesPerLine
                            , rec.lineHeight
                            , rec.linesPerArea
                            , rec.answersPosition
                            , rec.indexAnswersPosition
                            , rec.totalOutput
                            , rec.bubbleLines
                            , rec.regions
                            , rec.areas
                            , 0, 0, 0, 0//x1, x2, y1, y2
                            , rec.kx, rec.ky
                            , rec.curRect
                            , rec.etRect
                            , 0//deltaY
                            , rec.AmoutOfQuestions
                            , rec.IndexOfFirstQuestion
                            , maxCountRectangles
                            , rec.darknessPercent
                            , rec.darknessDifferenceLevel
                            , rec.lastBannerBottom
                            , deltaX
                            );
                            rec.FillBubbleItems(maxCountRectangles);//
                            rec.FillBubbleItemsRectangle(rec.allContourMultiLine, rec.factRectangle);
                            if (rec.Exception != null)
                            {
                                //MessageBox.Show
                                //            ("Please check that you have the correct number of columns and sub rows"
                                //            , Text, MessageBoxButtons.OK
                                //            , MessageBoxIcon.Exclamation
                                //            );
                                //Invoke(new MethodInvoker(delegate
                                //{
                                //    CloseProcessingForm();
                                //}));
                                return;
                            }
                            rec.FindBubble(rec.factRectangle, rec.allContourMultiLine, true);
                            if (rec.Exception != null)
                                return;
                            if (bac.CheckBoxArr.Length == 0)
                            {
                                //AddBubblesAreaControl(new BubbleEventArgs(false, rec.BubbleItems, rec.areas, rec.AmoutOfQuestions, rec.maxAmoutOfQuestions, rec.IndexOfFirstQuestion, rec.linesPerArea, rec.bubblesPerLine));
                                GetAreasSettings();
                                Invoke(new MethodInvoker(delegate
                                {
                                    bac = CreateNewBubblesAreaControl(rec.areas, rec.AmoutOfQuestions);
                                    bac.lockReport = true;
                                    DrawBubbleItems();
                                    bac.lockReport = false;
                                }));
                            }

                            Invoke(new MethodInvoker(delegate
                                        {
                                            if (!string.IsNullOrEmpty(barCodesPrompt))
                                            {
                                                rec.BarCodesPrompt = barCodesPrompt;
                                                if (!errList.Contains(rec.BarCodesPrompt))
                                                    errList.Add(rec.BarCodesPrompt);
                                                lblErr.Visible = true;
                                            }
                                            pictureBox1.Refresh();
                                            VerifyButton.Enabled = true;
                                            //Status = StatusMessage.NULL;
                                            rec.Status = RecognizeAction.NULL;
                                        }));
                            //rec.UpdateGui();
                            break;
                        case "RemoveNoise":
                            //cancelSource = new System.Threading.CancellationTokenSource();
                            rec.Bitmap = recTools.RemoveNoise(rec.Bitmap);
                            pictureBox1.Image = (Bitmap)rec.Bitmap.Clone();
                            break;
                    }
                    //if (qrCodeText == "")
                    //    e.Result = key;
                    //else
                    e.Result = new string[2] { key, qrCodeText };
                }
            }
        }