Esempio n. 1
0
        public Bitmap Paint(IEnumerable <GraphicString> words)
        {
            var wordsArr = words.ToArray();

            FillLayouter(wordsArr);
            var layoutRects = layouter.GetRectangles();

            if (imgSize == default)
            {
                imgSize = CalculateImageSize(layoutRects);
            }

            var bitmap = new Bitmap(imgSize.Width, imgSize.Height);

            using var g = Graphics.FromImage(bitmap);

            var rectIndex   = 0;
            var shiftVector = CalculateShiftVector(layoutRects);
            var background  = new Rectangle {
                Size = imgSize
            };

            g.DrawRectangle(new Pen(palette.BackgroundColor), background);
            g.FillRectangle(new SolidBrush(palette.BackgroundColor), background);
            foreach (var word in wordsArr)
            {
                var font = new Font(fontFamily, word.FontSize);
                using var brush = new SolidBrush(palette.GetNextColor());
                g.DrawString(word.Value, font, brush, layoutRects[rectIndex].Shift(shiftVector));

                rectIndex++;
            }

            return(bitmap);
        }
Esempio n. 2
0
        private void FailIfSmallSize(ILayouter layouter, Size imgSize)
        {
            var rects = layouter.GetRectangles();
            var a     = rects.Where(rect =>
                                    rect.Left <-1 || rect.Right - 1> imgSize.Width || rect.Top <-1 || rect.Bottom - 1> imgSize.Height);

            if (rects.Any(rect =>
                          rect.Left < -1 || rect.Right - 1 > imgSize.Width || rect.Top < -1 || rect.Bottom - 1 > imgSize.Height))
            {
                throw new ArgumentException("Размер изображения слишком маленький");
            }
        }
Esempio n. 3
0
        public Result <None> CreateImage(IInitialSettings settings)
        {
            var words = reader.ReadWords(settings.InputFilePath);

            return(wordProcessor.ProcessWords(words)
                   .Then(wordsWithCount => wordsWithCount.ToList())
                   .Then(wordsWithCount =>
            {
                words = wordsWithCount.Select(e => e.Word);
                var sizes = converter.ConvertToSizes(wordsWithCount);
                var rectangles = layouter.GetRectangles(sizes);
                return imageSizeCalculator.CalculateImageSize(rectangles)
                .Then(calculatedSize => HandleSize(settings, calculatedSize))
                .Then(imageSize => (rect: GetWordRectangles(words, rectangles, imageSize), imageSize));
            })
                   .Then(x => visualizer.DrawImage(x.rect, x.imageSize))
                   .Then(image => saver.SaveImage(image, settings.OutputFilePath)));
        }
Esempio n. 4
0
        public void CreateImage(IInitialSettings settings)
        {
            var words          = reader.ReadWords(settings.InputFilePath);
            var wordsWithCount = wordProcessor.ProcessWords(words).ToList();
            var sizes          = converter.ConvertToSizes(wordsWithCount);
            var rectangles     = layouter.GetRectangles(sizes);
            var imageSize      = settings.ImageSize;

            if (imageSize == Size.Empty)
            {
                imageSize = imageSizeCalculator.CalculateImageSize(rectangles);
            }
            rectangles = rectanglesTransformer.TransformRectangles(rectangles, imageSize);
            words      = wordsWithCount.Select(e => e.Word);
            var wordRectangles = words.Zip(rectangles, (w, r) => new WordRectangle(w, r)).ToList();
            var image          = visualizer.DrawImage(wordRectangles, imageSize);

            saver.SaveImage(image, settings.OutputFilePath);
        }