public frmActionBarAnalysis(Bitmap segment, Color backgroundColour, frmActionBarSelection sender, Design design) { InitializeComponent(); _segment = segment; _backgroundColour = backgroundColour; _senderForm = sender; _design = design; double gini; try { Bitmap preview; Views.ActionBar result = WidgetAnalyser.AnalyseActionBar(_segment, _backgroundColour, out gini, out preview); segmentPictureBox.BackgroundImage = preview; if (result != null) { lblGini.Text = gini.ToString(); lblType.Text = result.WidgetType.ToString(); txtActionBarLabel.Text = result.TitleText; _actionbar = result; } else { lblGini.Text = ""; lblType.Text = "I'm not sure this is an action bar. If it is, enter its title."; } } catch (ArgumentNullException) { MessageBox.Show("Background colour must be selected!", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); this.Close(); _senderForm.Show(); return; } }
private void btnDone_Click(object sender, EventArgs e) { if (_actionbar == null) { if (MessageBox.Show("Are you sure you want to proceed without setting an actionbar?","",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question) != System.Windows.Forms.DialogResult.No) { return; } } if (txtActionBarLabel.Text == "") { if (MessageBox.Show("Actionbar text is blank, continue?", "", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) != System.Windows.Forms.DialogResult.No) { return; } } if (_actionbar != null) { _actionbar = new Views.ActionBar(); _actionbar.TitleText = txtActionBarLabel.Text; _actionbar.RegisterTitleTextWithStringsFile(_design); } _design.ActionBar = _actionbar; this.Close(); _senderForm.Show(); _senderForm.IncrementStep(); }
private static Views.ActionBar AnalyseActionBar(Image<Bgr, Byte> image, Color BackgroundColour) { ActionBarText title = new ActionBarText(); bool currentTextIsTitle = true; List<ActionBarText> textualButtons = new List<ActionBarText>(); _ocr.Recognize(image.Convert<Gray, Byte>()); Tesseract.Charactor[] charactors = _ocr.GetCharactors(); bool[] alreadyScannedXCoord = new bool[image.Width]; ActionBarText button = new ActionBarText(); button.Text = ""; if (charactors.Length > 0) { int startCharactor = 0; string completeString = ""; for (int i = 0; i < charactors.Length; i++) { completeString += charactors[i].Text; } Regex regex = new Regex(@"^((?=[a-zA-Z][a-zA-Z])[a-zA-Z]|[0-9]).+$"); for (int i = 0; i < completeString.Length; i++) { if (regex.IsMatch(completeString.Substring(i))) { startCharactor = i; break; } } Regex isWord = new Regex(@"^[a-zA-Z]*$"); int startX = charactors[startCharactor].Region.X; int endX = startX + charactors[startCharactor].Region.Width; int indexOfStartTextRegion = startCharactor; if (startX > image.Width / 4) { currentTextIsTitle = false; } else { title.Text += charactors[startCharactor].Text; } for (int i = startCharactor + 1; i < charactors.Length; i++) { if (currentTextIsTitle && (endX + 5 > charactors[i].Region.X || charactors[i].Text == "")) { title.Text += charactors[i].Text; title.UpdateStartPoint(charactors[i].Region.X, charactors[i].Region.Y); title.UpdateFurthestPoint(charactors[i].Region.X + charactors[i].Region.Width, charactors[i].Region.Y + charactors[i].Region.Height); if (charactors[i].Text == " ") { endX += 10; } else { endX = charactors[i].Region.X + charactors[i].Region.Width; } } else if (endX + 5 > charactors[i].Region.X && charactors[i].Text != " ") { button.Text += charactors[i].Text; button.UpdateStartPoint(charactors[i].Region.X, charactors[i].Region.Y); button.UpdateFurthestPoint(charactors[i].Region.X + charactors[i].Region.Width, charactors[i].Region.Y + charactors[i].Region.Height); endX = charactors[i].Region.X + charactors[i].Region.Width; } else { if (currentTextIsTitle) { currentTextIsTitle = false; title.Text = title.Text.Trim(); break; } else { if (isWord.IsMatch(button.Text.Trim())) { textualButtons.Add(button); } button = new ActionBarText(); button.Text = ""; } for (int x = startX; x <= endX; x++) { alreadyScannedXCoord[x] = true; } if (charactors[i].Text == " ") { i++; } startX = charactors[i].Region.X; endX = startX + charactors[i].Region.Width; indexOfStartTextRegion = i; } } } Views.ActionBar result = new Views.ActionBar(); result.WidgetType = WidgetType.ActionBar; result.TitleText = title.Text; //Background colour and text colour detection Color backgroundColor; Color textColor; getPrimaryAndSecondaryColours(image, out backgroundColor, out textColor); string backgroundColourName = Colour.AddPrimaryColour(backgroundColor); string textColourName = Colour.AddColour(textColor, result.WidgetType, result.TitleText); return result; }