Exemplo n.º 1
0
        public static void RenderPages(string messageFilename, int scale, bool withWav, string outputDir)
        {
            if (!Directory.Exists(outputDir))
            {
                Directory.CreateDirectory(outputDir);
            }
            var messageDir = Path.GetDirectoryName(messageFilename) !;
            var message    = File.ReadAllText(messageFilename);
            var pages      = message.Replace("\r", "").Split("\n\n");

            for (int i = 0; i < pages.Length; i++)
            {
                var renderer   = new RenderContext(Renderer.Instance);
                var lines      = pages[i].Split("\n");
                var needBorder = false;
                foreach (var line in lines)
                {
                    try
                    {
                        if (line.StartsWith("//"))
                        {
                            continue;
                        }
                        if (line.StartsWith("IMAGE_"))
                        {
                            var imageName = line.Split("_", 2)[1];
                            using var stream = new FileStream(Path.Combine(messageDir, imageName), FileMode.Open);
                            var pixels = CoreImplementations.ImageToPixels(stream);
                            renderer.AddPixels(pixels);
                        }
                        else
                        {
                            ReportIncorrectMessagesToConsole(line);
                            needBorder = true;
                            renderer.AddLine(line);
                        }
                    }
                    catch (Exception e)
                    {
                        throw new Exception(line, e);
                    }
                }
                if (renderer.Points.Count == 0)
                {
                    throw new Exception(i.ToString());
                }
                var humanReadableIndex = i + 1;
                var points             = needBorder ? AddBorder(renderer.Points.ToList()).ToList() : renderer.Points;
                SaveImageFile(scale, points, Path.Combine(outputDir, $"message{humanReadableIndex}.png"));
                if (withWav && i == 0)
                {
                    SaveAudioFile(points, Path.Combine(outputDir, $"message{humanReadableIndex}.wav"));
                }
            }
        }