public static Result <List <CloudTag> > CreateCloudTags(string fullPath, TextParser parser, ITagsPrepossessing tagPlacer, CloudSettings cloudSettings) { var parsedElements = parser.ParseElementsFromFile(fullPath); if (!parsedElements.IsSuccess) { return(Result.Fail <List <CloudTag> >(parsedElements.Error)); } var elements = parsedElements.GetValueOrThrow(); elements = cloudSettings.TagOrderPreform.OrderEnumerable(elements); var result = new List <CloudTag>(); foreach (var element in elements) { var font = new Font(cloudSettings.TagTextFontFamily, Math.Min(cloudSettings.MaximalFontSize, element.Count * cloudSettings.FontSizeMultiplier)); var size = new Size(TextRenderer.MeasureText(element.Element, font).Width, TextRenderer.MeasureText(element.Element, font).Height); var rect = tagPlacer.PutNextRectangle(size); if (!rect.IsSuccess) { return(Result.Fail <List <CloudTag> >(rect.Error)); } result.Add(new CloudTag(rect.GetValueOrThrow(), element.Element, cloudSettings.TagTextFormat, font)); } return(result); }
public abstract Result <T> CreateTagCloudRepresentation(string fullPath, Size imageSize, CloudSettings settings);
public override Result <Bitmap> CreateTagCloudRepresentation(string fullPath, Size imageSize, CloudSettings settings) { var tags = TagGenerator.CreateCloudTags(fullPath, Parser, TagPlacer, settings); if (!tags.IsSuccess) { return(Result.Fail <Bitmap>(tags.Error)); } var bitmap = new Bitmap(imageSize.Width, imageSize.Height); var graphics = Graphics.FromImage(bitmap); graphics.Clear(settings.ColorPainter.BackgroundColor); var textPen = new Pen(Color.Black); var rectPen = new Pen(Color.Black); foreach (var tag in tags.GetValueOrThrow()) { rectPen.Color = settings.ColorPainter.GetTagShapeColor(); graphics.DrawRectangle(rectPen, tag.Shape); textPen.Color = settings.ColorPainter.GetTagTextColor(rectPen.Color); var text = settings.TagTextPreform.PreformToVisualize(tag.Text); graphics.DrawString(text, tag.TextFont, textPen.Brush, tag.Shape.ConvertToRectangleF(), tag.Format); } return(bitmap); }