MeasureString() with Maui.Graphics
How to measure the pixel dimensions of a string using Microsoft.Maui.Graphics
Starting with .NET 6 Microsoft is sunsetting cross-platform support for System.Drawing.Common
. Microsoft.Maui.Graphics
is emerging as an excellent replacement and it can be used in any app (not just MAUI apps).
Code here demonstrates how I measure the pixel size of a string using Maui.Graphics
in a console application.
UPDATE: This article was written when
Microsoft.Maui.Graphics
was still in preview. See Drawing with Maui Graphics (blog post) and C# Data Visualization (website) for updated code examples and information about using this library.
/* Updated on 2022-02-19 */
using Microsoft.Maui.Graphics; // 6.0.200-preview.13.935
using Microsoft.Maui.Graphics.Skia; // 6.0.200-preview.13.935
// setup a canvas with a blue background
using BitmapExportContext bmp = new SkiaBitmapExportContext(450, 150, 1.0f);
ICanvas canvas = bmp.Canvas;
canvas.FillColor = Colors.Navy;
canvas.FillRectangle(0, 0, bmp.Width, bmp.Height);
// define and measure a string
PointF stringLocation = new(50, 50);
string stringText = "Hello, Maui.Graphics!";
Font font = new();
float fontSize = 32;
SizeF stringSize = canvas.GetStringSize(stringText, font, fontSize);
Rectangle stringRect = new(stringLocation, stringSize);
// draw the string and its outline
canvas.StrokeColor = Colors.White;
canvas.DrawRectangle(stringRect);
canvas.FontColor = Colors.Yellow;
canvas.Font = font;
canvas.FontSize = fontSize - 1; // NOTE: reduce to prevent clipping
canvas.DrawString(
value: stringText,
x: stringLocation.X,
y: stringLocation.Y,
width: stringSize.Width,
height: stringSize.Height,
horizontalAlignment: HorizontalAlignment.Left,
verticalAlignment: VerticalAlignment.Top,
textFlow: TextFlow.OverflowBounds,
lineSpacingAdjustment: 0);
// save the result
string filePath = Path.GetFullPath("Issue279.png");
using FileStream fs = new(filePath, FileMode.Create);
bmp.WriteToStream(fs);
Console.WriteLine(filePath);
Note that in this example GetStringSize()
respects font but DrawString()
does not.