/* * Greenshot - a free and open source screenshot tool * Copyright (C) 2007-2020 Thomas Braun, Jens Klingen, Robin Krom * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on GitHub https://github.com/greenshot/greenshot * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 1 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ using System.Collections.Generic; using System.Drawing; using System.Threading.Tasks; namespace GreenshotPlugin.Interfaces { /// /// This interface describes something that can do OCR of a bitmap /// public interface IOcrProvider { /// /// Start the actual OCR /// /// Image /// OcrInformation Task DoOcrAsync(Image image); /// /// Start the actual OCR /// /// ISurface /// OcrInformation Task DoOcrAsync(ISurface surface); } /// /// Contains the information about a word /// public class Word { /// /// The actual text for the word /// public string Text { get; set; } /// /// The location of the word /// public Rectangle Location { get; set; } } /// /// Describes a line of words /// public class Line { private Rectangle? _calculatedBounds; /// /// Constructor will preallocate the number of words /// /// int public Line(int wordCount) { Words = new Word[wordCount]; for (int i = 0; i < wordCount; i++) { Words[i] = new Word(); } } /// /// An array with words /// public Word[] Words { get; } /// /// Calculate the bounds of the words /// /// Rectangle private Rectangle CalculateBounds() { if (Words.Length == 0) { return Rectangle.Empty; } var result = Words[0].Location; for (var index = 0; index < Words.Length; index++) { result = Rectangle.Union(result, Words[index].Location); } return result; } /// /// Return the calculated bounds for the whole line /// public Rectangle CalculatedBounds { get { return _calculatedBounds ??= CalculateBounds(); } } } /// /// Contains all the information on the OCR result /// public class OcrInformation { public string Text { get; set; } public IList Lines { get; } = new List(); } }