public static string[] GetSupportedFontFamilies() { using (SKFontManager skFontManager = SKFontManager.CreateDefault()) { return(skFontManager.GetFontFamilies()); } }
public IEnumerable <string> GetInstalledFontFamilyNames(bool checkForUpdates = false) { if (checkForUpdates) { _skFontManager = SKFontManager.CreateDefault(); } return(_skFontManager.FontFamilies); }
private static void DrawEmojii() { int GrinningFaceEmoji = 0x1f600; var rotated = new SKBitmap(256, 256); using (SKCanvas canvas = new SKCanvas(rotated)) { string emoji; int x; int y; SKPaint paint = new SKPaint(); paint.Typeface = SKFontManager.CreateDefault().MatchCharacter(GrinningFaceEmoji); //canvas.DrawText(emoji, x, y, vtsm.paint); } }
public void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args) { try { SKImageInfo info = args.Info; SKSurface surface = args.Surface; SKCanvas canvas = surface.Canvas; Assembly assembly = GetType().GetTypeInfo().Assembly; if (_saveBitmap == null) { _saveBitmap = new SKBitmap(info.Width, info.Height); } SKBitmap bitmap = new SKBitmap(Math.Max(_saveBitmap.Width, info.Width), Math.Max(_saveBitmap.Height, info.Height)); float x = info.Width / 3; float y = (float)(info.Height / 1.5); using (SKCanvas c = new SKCanvas(bitmap)) { foreach (SKPath p in _completedPaths) { c.DrawPath(p, paint); } foreach (SKPath p in _inProgressPaths.Values) { c.DrawPath(p, paint); } } canvas.Clear(); canvas.DrawBitmap(bitmap, 0, 0); var emoji = _vm.Image; int exEmoji = 0x1f600; paint.Typeface = SKFontManager.CreateDefault().MatchCharacter(exEmoji); paint.TextSize = 210.0f; var tf = SKFontManager.CreateDefault().MatchCharacter(exEmoji); var shaper = new SKShaper(tf); canvas.DrawShapedText(shaper, emoji, x, y, paint); } catch { } }
public void TestCreateDefault() { Assert.NotNull(SKFontManager.CreateDefault()); }
public static async Task Run( [QueueTrigger("create-hero")] KeyValuePair <string, string> hf, [Blob("heroimages")] CloudBlobContainer heroContainer, [Blob("hashflags")] CloudBlobContainer hashflagsContainer, [Queue("tweet")] ICollector <KeyValuePair <string, string> > tweetCollector, ILogger log) { log.LogInformation($"Function executed at: {DateTime.Now}"); var hashtag = '#' + hf.Key; var textSize = GetAdjustedFont(hashtag); var info = new SKImageInfo(ImageWidth, ImageHeight); using var surface = SKSurface.Create(info); var canvas = surface.Canvas; canvas.Clear(SKColors.White); #region hashtag var typefaces = hf.Key.Select(character => SKFontManager.CreateDefault().MatchCharacter(FontFamily, character)).ToList(); using var tf = typefaces.FirstOrDefault(t => t.FamilyName != FontFamily) ?? SKTypeface.FromFamilyName(FontFamily); using var shaper = new SKShaper(tf); var paint = new SKPaint { IsAntialias = true, Color = new SKColor(29, 161, 242), TextSize = textSize, Typeface = tf }; var bounds = new SKRect(); paint.MeasureText(hashtag, ref bounds); var point = GetPoint(hashtag, bounds.Height, bounds.Width); canvas.DrawShapedText(shaper, hashtag, point.X, point.Y, paint); #endregion #region hashflag await using var stream = new MemoryStream(); await hashflagsContainer.GetBlockBlobReference(hf.Value).DownloadToStreamAsync(stream); stream.Seek(0, SeekOrigin.Begin); var hashflagImage = SKBitmap.Decode(stream); var x = IsRtl(hashtag) ? point.X - HashflagSize - 10 : point.X + bounds.Width + 10; var y = (ImageHeight - HashflagSize) / 2; canvas.DrawBitmap(hashflagImage, x, y); #endregion #region watermark paint = new SKPaint { Color = new SKColor(20, 23, 26, 127), TextSize = 18, IsAntialias = true, Typeface = tf }; canvas.DrawShapedText(shaper, "@HashflagArchive", 900, 575, paint); #endregion canvas.Flush(); await heroContainer.CreateIfNotExistsAsync(); var heroBlob = heroContainer.GetBlockBlobReference(hf.Key); heroBlob.Properties.ContentType = "image/png"; await heroBlob.UploadFromStreamAsync(ToStream(surface)); tweetCollector.Add(hf); }
public FontManagerTypefacerovider() { FontManager = SKFontManager.Default; }
static int makeMeme(string picture, string text, string text2) { SKFontManager fontManager = SKFontManager.CreateDefault(); SKTypeface pressuru = fontManager.CreateTypeface(program_dir + @"\res\pressuru.otf"); SKBitmap bitmap = SKBitmap.Decode(picture); SKCanvas canvas = new SKCanvas(bitmap); SKPaint paint = new SKPaint(); SKRect rect = new SKRect(); SKColor white = new SKColor(255, 255, 255); SKColor black = new SKColor(0, 0, 0); if (pressuru == null) { Console.WriteLine("Couldn't find pressuru font\nHalting program"); return(1); } text = text.ToUpper(); text2 = text2.ToUpper(); paint.TextSize = 48f; paint.Typeface = pressuru; paint.IsAntialias = true; paint.StrokeWidth = 2; float y = 10; float sp = 0; float textHeight; paint.MeasureText("A", ref rect); textHeight = rect.Height; List <string> top_lines = wrapLines(text, paint, bitmap.Width); foreach (string line in top_lines) { paint.Color = white; paint.IsStroke = false; paint.MeasureText(line, ref rect); y += textHeight; canvas.DrawText(line, bitmap.Width / 2f - rect.Width / 2f, y + sp, paint); paint.IsStroke = true; paint.Color = black; canvas.DrawText(line, bitmap.Width / 2f - rect.Width / 2f, y + sp, paint); sp += 5; } List <string> bottom_lines = wrapLines(text2, paint, bitmap.Width); int bottomMargin = 10; // space added to the bottom. the same for the top text. int linesCount = bottom_lines.Count; // no space is needed between 1 line int spaceBetweenLinesTotal = ((linesCount - 1) * 5); // raise the y high enough to print down y = bitmap.Height - textHeight * linesCount - spaceBetweenLinesTotal - bottomMargin; sp = 0; // bottom text foreach (string line in bottom_lines) { paint.Color = white; paint.IsStroke = false; paint.MeasureText(line, ref rect); y += textHeight; canvas.DrawText(line, bitmap.Width / 2f - rect.Width / 2f, y + sp, paint); paint.IsStroke = true; paint.Color = black; canvas.DrawText(line, bitmap.Width / 2f - rect.Width / 2f, y + sp, paint); sp += 5; } SKImage image = SKImage.FromBitmap(bitmap); SKData data = image.Encode(SKEncodedImageFormat.Png, 80); using (Stream stream = File.OpenWrite("meme.png")) { data.SaveTo(stream); } return(0); }
public FontManager(SKFontManager fontManager) => this.fontManager = fontManager;