diff --git a/OCR_Decode/Form1.Designer.cs b/OCR_Decode/Form1.Designer.cs index fd3125b..2bb026f 100644 --- a/OCR_Decode/Form1.Designer.cs +++ b/OCR_Decode/Form1.Designer.cs @@ -41,6 +41,7 @@ this.pbxImage.Location = new System.Drawing.Point(12, 12); this.pbxImage.Name = "pbxImage"; this.pbxImage.Size = new System.Drawing.Size(1000, 600); + this.pbxImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.pbxImage.TabIndex = 0; this.pbxImage.TabStop = false; // diff --git a/OCR_Decode/Form1.cs b/OCR_Decode/Form1.cs index 11ad06d..0fc4f5a 100644 --- a/OCR_Decode/Form1.cs +++ b/OCR_Decode/Form1.cs @@ -24,6 +24,7 @@ namespace OCR_Decode private void Form1_Load(object sender, EventArgs e) { Reader = new Reader(CONFIG_FILE,TEMPORARY_IMAGE_FOLDER); + pbxImage.Image = Reader.Draw(9); } } } diff --git a/OCR_Decode/Reader.cs b/OCR_Decode/Reader.cs index 263ff40..8d66f77 100644 --- a/OCR_Decode/Reader.cs +++ b/OCR_Decode/Reader.cs @@ -5,7 +5,6 @@ using System.Text; using System.Threading.Tasks; using System.Drawing; using System.IO; -//using Newtonsoft.Json; using System.Text.Json; using System.Windows.Forms; @@ -16,12 +15,13 @@ namespace OCR_Decode private string _configFile; private string _imagesFolder; private List _drivers; - private List MainZones; + private List _mainZones; private Bitmap FullImage; private int ImageNumber; public string ConfigFile { get => _configFile; private set => _configFile = value; } public string ImagesFolder { get => _imagesFolder; private set => _imagesFolder = value; } public List Drivers { get => _drivers; private set => _drivers = value; } + public List MainZones { get => _mainZones; set => _mainZones = value; } const string DEFAULT_IMAGE_NAME = "screen_"; const int NUMBER_OF_DRIVERS = 20; @@ -35,6 +35,7 @@ namespace OCR_Decode } private void Load() { + MainZones = new List(); FullImage = (Bitmap)Image.FromFile(ImagesFolder + DEFAULT_IMAGE_NAME + ImageNumber + ".png"); Zone MainZone; try @@ -44,6 +45,14 @@ namespace OCR_Decode var jsonText = streamReader.ReadToEnd(); var jsonDocument = JsonDocument.Parse(jsonText); + var driversNames = jsonDocument.RootElement.GetProperty("Drivers"); + Drivers = new List(); + + foreach (var nameElement in driversNames.EnumerateArray()) + { + Drivers.Add(nameElement.GetString()); + } + var mainProperty = jsonDocument.RootElement.GetProperty("Main"); Point MainPosition = new Point(mainProperty.GetProperty("x").GetInt32(), mainProperty.GetProperty("y").GetInt32()); Size MainSize = new Size(mainProperty.GetProperty("width").GetInt32(), mainProperty.GetProperty("height").GetInt32()); @@ -58,9 +67,6 @@ namespace OCR_Decode var windows = driverZone.GetProperty("Windows"); - // Add the position Window - // Add the Gap to leader window - //Etc... //var driverPosition = windows.GetProperty("Position"); var driverPosition = windows[0].GetProperty("Position"); Size driverPositionArea = new Size(driverPosition.GetProperty("width").GetInt32(), FirstZoneSize.Height); @@ -99,40 +105,28 @@ namespace OCR_Decode Size driverSector3Area = new Size(driverSector3.GetProperty("width").GetInt32(), FirstZoneSize.Height); Point driverSector3Position = new Point(driverSector3.GetProperty("x").GetInt32(), driverSector3.GetProperty("y").GetInt32()); - for (int i = 1; i <= NUMBER_OF_DRIVERS; i++) + float offset = (((float)MainZone.ZoneImage.Height - (float)(Drivers.Count * FirstZoneSize.Height)) / (float)Drivers.Count); + + for (int i = 0; i < NUMBER_OF_DRIVERS; i++) { - Point tmpPos = new Point(FirstZonePosition.X, i * FirstZonePosition.Y); + Point tmpPos = new Point(0,FirstZonePosition.Y + i * FirstZoneSize.Height - Convert.ToInt32(i*offset) /*- (i* (FirstZoneSize.Height / 32))*/); Zone newDriverZone = new Zone(MainZone.ZoneImage, new Rectangle(tmpPos, FirstZoneSize)); - newDriverZone.AddWindow(new Window(newDriverZone.ZoneImage, new Rectangle(driverPositionPosition, driverPositionArea))); - newDriverZone.AddWindow(new Window(newDriverZone.ZoneImage, new Rectangle(driverGapToLeaderPosition, driverGapToLeaderArea))); - newDriverZone.AddWindow(new Window(newDriverZone.ZoneImage, new Rectangle(driverLapTimePosition, driverLapTimeArea))); - newDriverZone.AddWindow(new Window(newDriverZone.ZoneImage, new Rectangle(driverDrsPosition, driverDrsArea))); - newDriverZone.AddWindow(new Window(newDriverZone.ZoneImage, new Rectangle(driverTyresPosition, driverTyresArea))); - newDriverZone.AddWindow(new Window(newDriverZone.ZoneImage, new Rectangle(driverNamePosition, driverNameArea))); - newDriverZone.AddWindow(new Window(newDriverZone.ZoneImage, new Rectangle(driverSector1Position, driverSector1Area))); - newDriverZone.AddWindow(new Window(newDriverZone.ZoneImage, new Rectangle(driverSector2Position, driverSector2Area))); - newDriverZone.AddWindow(new Window(newDriverZone.ZoneImage, new Rectangle(driverSector3Position, driverSector3Area))); + newDriverZone.AddWindow(new DriverPositionWindow(newDriverZone.ZoneImage, new Rectangle(driverPositionPosition, driverPositionArea))); + newDriverZone.AddWindow(new DriverGapToLeaderWindow(newDriverZone.ZoneImage, new Rectangle(driverGapToLeaderPosition, driverGapToLeaderArea))); + newDriverZone.AddWindow(new DriverLapTimeWindow(newDriverZone.ZoneImage, new Rectangle(driverLapTimePosition, driverLapTimeArea))); + newDriverZone.AddWindow(new DriverDrsWindow(newDriverZone.ZoneImage, new Rectangle(driverDrsPosition, driverDrsArea))); + newDriverZone.AddWindow(new DriverTyresWindow(newDriverZone.ZoneImage, new Rectangle(driverTyresPosition, driverTyresArea))); + newDriverZone.AddWindow(new DriverNameWindow(newDriverZone.ZoneImage, new Rectangle(driverNamePosition, driverNameArea))); + newDriverZone.AddWindow(new DriverSector1Window(newDriverZone.ZoneImage, new Rectangle(driverSector1Position, driverSector1Area))); + newDriverZone.AddWindow(new DriverSector2Window(newDriverZone.ZoneImage, new Rectangle(driverSector2Position, driverSector2Area))); + newDriverZone.AddWindow(new DriverSector3Window(newDriverZone.ZoneImage, new Rectangle(driverSector3Position, driverSector3Area))); MainZone.AddZone(newDriverZone); } - var driversNames = jsonDocument.RootElement.GetProperty("Drivers"); - Drivers = new List(); - - foreach (var nameElement in driversNames.EnumerateArray()) - { - Drivers.Add(nameElement.GetString()); - } - - MessageBox.Show("We have a main zone with " + MainZone.Zones.Count() + " Driver zones with " + MainZone.Zones[4].Windows.Count() + " windows each and we have " + Drivers.Count + " drivers"); - - /* - foreach (var zoneElement in zones.EnumerateArray()) - { - That would be used if there were multiple DriverZones, wich is not the case because we only need one - } - */ + //MessageBox.Show("We have a main zone with " + MainZone.Zones.Count() + " Driver zones with " + MainZone.Zones[4].Windows.Count() + " windows each and we have " + Drivers.Count + " drivers"); + MainZones.Add(MainZone); } } catch (IOException ex) @@ -144,6 +138,63 @@ namespace OCR_Decode MessageBox.Show("Invalid JSON format: " + ex.Message); } } + public string Decode(int idImage) + { + string result = ""; + Bitmap imageToDecode; + try + { + imageToDecode = (Bitmap)Image.FromFile(ImagesFolder + DEFAULT_IMAGE_NAME + idImage + ".png"); + } + catch + { + MessageBox.Show("Image could not be found"); + return null; + } + + + return result; + } + public Bitmap Draw(int idImage) + { + string debugDumpFolder = @"C:\Users\Moi\Desktop\imgDump\Decode\"; + Bitmap result; + try + { + result = (Bitmap)Image.FromFile(ImagesFolder + DEFAULT_IMAGE_NAME + idImage + ".png"); + } + catch + { + MessageBox.Show("Image could not be found"); + return null; + } + + Graphics g = Graphics.FromImage(result); + + foreach (Zone z in MainZones) + { + int count = 0; + foreach (Zone zz in z.Zones) + { + string driverFolder = debugDumpFolder + "driver" + count + "\\"; + if (!Directory.Exists(driverFolder)) + Directory.CreateDirectory(driverFolder); + + zz.ZoneImage.Save(driverFolder + "FullImage.png"); + + g.DrawRectangle(Pens.Red,z.Bounds); + foreach (Window w in zz.Windows) + { + w.WindowImage.Save(driverFolder + w.Name +".png"); + g.DrawRectangle(Pens.Blue,new Rectangle(z.Bounds.X + zz.Bounds.X,z.Bounds.Y + zz.Bounds.Y,zz.Bounds.Width,zz.Bounds.Height)); + } + + count++; + } + } + + return result; + } } }