diff --git a/src/ImageSharp.Drawing/Text/DrawText.cs b/src/ImageSharp.Drawing/Text/DrawText.cs
index 28781fab2..1f5f4cdb1 100644
--- a/src/ImageSharp.Drawing/Text/DrawText.cs
+++ b/src/ImageSharp.Drawing/Text/DrawText.cs
@@ -18,6 +18,8 @@ namespace ImageSharp
///
public static partial class ImageExtensions
{
+ private static readonly Vector2 DefaultTextDpi = new Vector2(72);
+
///
/// Draws the text onto the the image filled via the brush.
///
@@ -169,7 +171,12 @@ namespace ImageSharp
TextRenderer renderer = new TextRenderer(glyphBuilder);
- Vector2 dpi = new Vector2((float)source.MetaData.HorizontalResolution, (float)source.MetaData.VerticalResolution);
+ Vector2 dpi = DefaultTextDpi;
+ if (options.UseImageResolution)
+ {
+ dpi = new Vector2((float)source.MetaData.HorizontalResolution, (float)source.MetaData.VerticalResolution);
+ }
+
FontSpan style = new FontSpan(font)
{
ApplyKerning = options.ApplyKerning,
diff --git a/src/ImageSharp.Drawing/Text/TextGraphicsOptions.cs b/src/ImageSharp.Drawing/Text/TextGraphicsOptions.cs
index 253bb2aac..b58a40b34 100644
--- a/src/ImageSharp.Drawing/Text/TextGraphicsOptions.cs
+++ b/src/ImageSharp.Drawing/Text/TextGraphicsOptions.cs
@@ -35,6 +35,12 @@ namespace ImageSharp.Drawing
///
public float TabWidth;
+ ///
+ /// Flag weather to use the current image resultion to for point size scaling.
+ /// If this is [false] the text renders at 72dpi otherwise it renders at Image resolution
+ ///
+ public bool UseImageResolution;
+
///
/// Initializes a new instance of the struct.
///
@@ -45,6 +51,7 @@ namespace ImageSharp.Drawing
this.ApplyKerning = true;
this.TabWidth = 4;
this.AntialiasSubpixelDepth = 16;
+ this.UseImageResolution = false;
}
///
diff --git a/tests/ImageSharp.Tests/Drawing/Text/DrawText.cs b/tests/ImageSharp.Tests/Drawing/Text/DrawText.cs
index 68db4d9a2..52b7fcbb6 100644
--- a/tests/ImageSharp.Tests/Drawing/Text/DrawText.cs
+++ b/tests/ImageSharp.Tests/Drawing/Text/DrawText.cs
@@ -219,5 +219,32 @@ namespace ImageSharp.Tests.Drawing.Text
Assert.IsType>(this.img.ProcessorApplications[0].processor);
Assert.IsType>(this.img.ProcessorApplications[1].processor);
}
+
+ [Fact]
+ public void GlyphHeightChangesBasedOnuseImageResolutionFlag()
+ {
+ this.img.MetaData.VerticalResolution = 1;
+ this.img.MetaData.HorizontalResolution = 1;
+ this.img.DrawText("1", this.Font, Brushes.Solid(Color.Red), Vector2.Zero, new TextGraphicsOptions(true) {
+ UseImageResolution = false
+ });
+
+ this.img.DrawText("1", this.Font, Brushes.Solid(Color.Red), Vector2.Zero, new TextGraphicsOptions(true)
+ {
+ UseImageResolution = true
+ });
+
+ Assert.NotEmpty(this.img.ProcessorApplications);
+ Assert.Equal(2, this.img.ProcessorApplications.Count);
+ FillRegionProcessor ownResolution = Assert.IsType>(this.img.ProcessorApplications[0].processor);
+ FillRegionProcessor imgResolution = Assert.IsType>(this.img.ProcessorApplications[1].processor);
+
+ ShapeRegion ownRegion = Assert.IsType(ownResolution.Region);
+ ShapeRegion imgRegion = Assert.IsType(imgResolution.Region);
+
+ // magic numbers based on the font used at well known resolutions
+ Assert.Equal(7.44, ownRegion.Shape.Bounds.Height, 2);
+ Assert.Equal(0.1, imgRegion.Shape.Bounds.Height, 2);
+ }
}
}