public static void TestDecompose() { var dir = new DirectoryInfo(@"C:\Users\Michael\Dropbox\BDO\OCR\ui scaling\fullscreens"); var output = new DirectoryInfo(@"C:\Users\Michael\Dropbox\BDO\OCR\ui scaling\fullscreens\output"); foreach (var img in dir.EnumerateFiles()) { Console.WriteLine($"Processiong {img.Name} : {img.Length/1000000} mb"); var intScale = Convert.ToInt32(img.Name.Replace(img.Extension, "")); var scale = intScale / 100d; var bitmap = (Bitmap)Image.FromFile(img.FullName); var region = ImageDecomposer.Decompose(bitmap, scale, bitmap.Width, bitmap.Height); var saveDir = new DirectoryInfo(output + @"\" + img.Name); if (!saveDir.Exists) { saveDir.Create(); } var queue = new Queue <ImageRegion>(); queue.Enqueue(region); while (queue.Count > 0) { var currentRegion = queue.Dequeue(); foreach (var c in currentRegion.ChildRegions) { queue.Enqueue(c); } var newBitmap = currentRegion.GetColorData(bitmap); newBitmap.Save(Path.Combine(saveDir.FullName, currentRegion.RegionName + ".png")); newBitmap.Dispose(); } bitmap.Dispose(); } }
void Process(WorkUnit workUnit) { var ssName = GetScreenshotName(); if (SaveScreenshots) { workUnit.Bitmap.Save(Path.Combine(ScreenshotDirectory, ssName + ".png")); } var marketScreen = ImageDecomposer.GetMarketScreen(workUnit.Bitmap, UIScale, workUnit.Bitmap.Width, workUnit.Bitmap.Height); workUnit.MarketScreen = marketScreen; workUnit.InvokeDecompComplete(); if (SaveDecomposedImages) { SaveImages(ssName, marketScreen); } if (SaveScreenshots || SaveDecomposedImages) { workUnit.InvokeImageSaveComplete(); } List <ItemAnalysis> analysis = new List <ItemAnalysis>(); foreach (var l in marketScreen.ItemListings) { var a = _imageAnalyzer.Analyze(l); if (!KeepIconBitmapWithAnalysis) { a.Icon.Dispose(); } analysis.Add(a); } workUnit.InternalItems.AddRange(analysis); workUnit.InvokeOcrComplete(); foreach (var a in analysis) { if (ItemPasses(a)) { workUnit.InternalValidItems.Add(a); } else { workUnit.InternalInvalidItems.Add(a); } } if (LogObservationsToFile) { LogObservation(workUnit.ValidItems, true); LogObservation(workUnit.InvalidItems, false); } if (AutoAddNewItemsToDatabase || SaveObservationsToDatabase) { ProcessAnalysis(workUnit.ValidItems, workUnit); workUnit.InvokeDatabaseOpsComplete(); } workUnit.Bitmap.Dispose(); workUnit.InvokeComplete(); }