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();
            }
        }
Esempio n. 2
0
        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();
        }