Files
Avalonia/PortfolioManager/UIUtils/TextMarkerImageGenerator.cs
2025-07-13 08:43:51 -04:00

60 lines
2.8 KiB
C#

using System;
using System.IO;
using Avalonia.Automation;
using Avalonia.Media;
using Avalonia.Media.Imaging;
using MarketData.CNNProcessing;
using MarketData.Utils;
using ScottPlot;
using SkiaSharp;
public static class TextMarkerImageGenerator
{
public static Image GenerateImage(String text,int width=130, int height=24, int fontSize=12)
{
ImageHelper imageHelper = new ImageHelper();
imageHelper.CreateImage(width, height);
imageHelper.Fill(SKColors.White);
SKTextAlign align = SKTextAlign.Center;
SKFont font = new SKFont(SKTypeface.FromFamilyName("Arial",500,5,SKFontStyleSlant.Upright), fontSize);
imageHelper.DrawLine(SKColors.Black,1, new SKPoint(0,0), new SKPoint(width-1,0)); // bottom left to right
imageHelper.DrawLine(SKColors.Black,1, new SKPoint(width-1,0), new SKPoint(width-1,height-1)); // up lefthand side
imageHelper.DrawLine(SKColors.Black,1, new SKPoint(0,height-1), new SKPoint(width-1,height-1)); // top left to right
imageHelper.DrawLine(SKColors.Black,1, new SKPoint(0,height-1), new SKPoint(0,0)); // left hand side top to bottom
imageHelper.DrawText(text, new SKPoint(width / 2, height-8), SKColors.Black, align, font);
using MemoryStream memoryStream = new MemoryStream();
imageHelper.ToStream().CopyTo(memoryStream);
return new ScottPlot.Image(memoryStream.ToArray());
}
public static Image GenerateImage(String text,int fontSize=11)
{
ImageHelper imageHelper = new ImageHelper();
SKFont font = default;
if (Utility.IsOSWindows())font = new SKFont(SKTypeface.FromFamilyName("Helvetica",500,5,SKFontStyleSlant.Upright), fontSize);
else font = new SKFont(SKTypeface.FromFamilyName(familyName: "Helvetica", weight: SKFontStyleWeight.Normal, width: SKFontStyleWidth.UltraCondensed, slant: SKFontStyleSlant.Upright), fontSize, .80f);
SKTextAlign align = SKTextAlign.Left;
imageHelper.CreateBoundedText(text, SKColors.Black, SKColors.White, align, font);
using MemoryStream memoryStream = new MemoryStream();
imageHelper.ToStream().CopyTo(memoryStream);
return new ScottPlot.Image(memoryStream.ToArray());
}
public static Image ToSPImage(IImage image)
{
Bitmap bitmap = (Bitmap)image; //ImageCache.GetInstance().GetImage(ImageCache.ImageType.BlueTriangleUp);
using MemoryStream memoryStream = new MemoryStream();
bitmap.Save(memoryStream);
return new ScottPlot.Image(memoryStream.ToArray());
}
public static IImage GenerateImage(int width, int height, SKColor color)
{
ImageHelper imageHelper = new ImageHelper();
imageHelper.CreateImage(width, height);
imageHelper.Fill(color);
Avalonia.Media.Imaging.Bitmap avBitmap = new Avalonia.Media.Imaging.Bitmap(imageHelper.ToStream());
return avBitmap;
}
}