When we draw text combined with graphics, it is very important to be able to measure text size taking into account font settings. This topic describes how to get an extent of single-line and multiline text using Graphics Mill for .NET.
Measuring the extent of the text string drawn by the GdiGraphics.DrawString method with Graphics Mill for .NET is very easy. Just specify font name, size and other settings in the Font class and use Font.MeasureString(String) method to get string width and height. This figure:
can be produced with following code:
' Create Bitmap object. Dim bitmap As New Aurigma.GraphicsMill.Bitmap(250, 40, Aurigma.GraphicsMill.PixelFormat.Format24bppRgb) bitmap.Unit = Aurigma.GraphicsMill.Unit.Point Dim graphics As Aurigma.GraphicsMill.Drawing.GdiGraphics = bitmap.GetGdiGraphics() ' Fill background. graphics.FillRectangle(New Aurigma.GraphicsMill.Drawing.SolidBrush( _ Aurigma.GraphicsMill.RgbColor.White), 0, 0, bitmap.Width, bitmap.Height) ' Adjust font settings. Dim timesFont As New Aurigma.GraphicsMill.Drawing.Font("Times New Roman", 25, False, True) Dim text As String = "Single-line text..." ' Measure the text size. Dim size As System.Drawing.SizeF = timesFont.MeasureString(text) Dim blackBrush As New Aurigma.GraphicsMill.Drawing.SolidBrush(Aurigma.GraphicsMill.RgbColor.Black) graphics.DrawString(text, timesFont, blackBrush, 0, 0) Dim redBrush As New Aurigma.GraphicsMill.Drawing.SolidBrush(Aurigma.GraphicsMill.RgbColor.Red) Dim tahomaFont As New Aurigma.GraphicsMill.Drawing.Font("Tahoma", 12) text = "Height: " & size.Height graphics.DrawString(text, tahomaFont, redBrush, size.Width + 1, 20) text = "Width: " & size.Width graphics.DrawString(text, tahomaFont, redBrush, size.Width + 1, 0)
// Create Bitmap object. Aurigma.GraphicsMill.Bitmap bitmap = new Aurigma.GraphicsMill.Bitmap(250, 40, Aurigma.GraphicsMill.PixelFormat.Format24bppRgb); bitmap.Unit = Aurigma.GraphicsMill.Unit.Point; Aurigma.GraphicsMill.Drawing.GdiGraphics graphics = bitmap.GetGdiGraphics(); // Fill background. graphics.FillRectangle(new Aurigma.GraphicsMill.Drawing.SolidBrush( Aurigma.GraphicsMill.RgbColor.White), 0, 0, bitmap.Width, bitmap.Height); // Adjust font settings. Aurigma.GraphicsMill.Drawing.Font timesFont = new Aurigma.GraphicsMill.Drawing.Font("Times New Roman", 25, false, true); string text = "Single-line text..."; // Measure the text size. System.Drawing.SizeF size = timesFont.MeasureString(text); Aurigma.GraphicsMill.Drawing.SolidBrush blackBrush = new Aurigma.GraphicsMill.Drawing.SolidBrush(Aurigma.GraphicsMill.RgbColor.Black); graphics.DrawString(text, timesFont, blackBrush, 0, 0); Aurigma.GraphicsMill.Drawing.SolidBrush redBrush = new Aurigma.GraphicsMill.Drawing.SolidBrush(Aurigma.GraphicsMill.RgbColor.Red); Aurigma.GraphicsMill.Drawing.Font tahomaFont = new Aurigma.GraphicsMill.Drawing.Font("Tahoma", 12); text = "Height: " + size.Height.ToString(); graphics.DrawString(text, tahomaFont, redBrush, size.Width + 1, 20); text = "Width: " + size.Width.ToString(); graphics.DrawString(text, tahomaFont, redBrush, size.Width + 1, 0);
Graphics Mill for .NET provides the GdiGraphics.DrawText method to draw single-style multiline text. To measure this text extent you can use the Font.MeasureText method. This method accepts the following parameters:
false
the whole text is processed. Otherwise, only the part which fits into the destination rectangle is measured.To get a valid text size, parameters values passed to this method should be identical to the respective parameters of the GdiGraphics.DrawText method.
The code example below draws the following figure:
' Create Bitmap object. Dim bitmap As New Aurigma.GraphicsMill.Bitmap(220, 100, Aurigma.GraphicsMill.PixelFormat.Format24bppRgb) bitmap.Unit = Aurigma.GraphicsMill.Unit.Point Dim graphics As Aurigma.GraphicsMill.Drawing.GdiGraphics = bitmap.GetGdiGraphics() ' Fill background. graphics.FillRectangle(New Aurigma.GraphicsMill.Drawing.SolidBrush( _ Aurigma.GraphicsMill.RgbColor.White), 0, 0, bitmap.Width, bitmap.Height) ' Adjust font settings. Dim font As New Aurigma.GraphicsMill.Drawing.Font("Tahoma", 12) Dim rect As New System.Drawing.RectangleF(0, 0, 150, 100) Dim text As String = "Aurigma Graphics Mill is a set of powerful, fast, and " & _ "memory-friendly components which resolve most image processing requirements: " & _ "load/save files of most popular formats, enhance, transform, display, " & _ "reduce colors, combine images, draw imagery, etc." ' Measure the text size. Dim size As System.Drawing.SizeF = font.MeasureText(text, rect.Width, rect.Height, True, 0) Dim blackBrush As New Aurigma.GraphicsMill.Drawing.SolidBrush(Aurigma.GraphicsMill.RgbColor.Black) graphics.DrawText(text, font, blackBrush, rect, True, 0) Dim redBrush As New Aurigma.GraphicsMill.Drawing.SolidBrush(Aurigma.GraphicsMill.RgbColor.Red) text = "Height: " & size.Height graphics.DrawString(text, font, redBrush, size.Width + 1, 0) text = "Width: " & size.Width graphics.DrawString(text, font, redBrush, size.Width + 1, 20)
// Create Bitmap object. Aurigma.GraphicsMill.Bitmap bitmap = new Aurigma.GraphicsMill.Bitmap(220, 100, Aurigma.GraphicsMill.PixelFormat.Format24bppRgb); bitmap.Unit = Aurigma.GraphicsMill.Unit.Point; Aurigma.GraphicsMill.Drawing.GdiGraphics graphics = bitmap.GetGdiGraphics(); // Fill background. graphics.FillRectangle(new Aurigma.GraphicsMill.Drawing.SolidBrush( Aurigma.GraphicsMill.RgbColor.White), 0, 0, bitmap.Width, bitmap.Height); // Adjust font settings. Aurigma.GraphicsMill.Drawing.Font font = new Aurigma.GraphicsMill.Drawing.Font("Tahoma", 12); System.Drawing.RectangleF rect = new System.Drawing.RectangleF(0, 0, 150, 100); string text = "Aurigma Graphics Mill is a set of powerful, fast, and " + "memory-friendly components which resolve most image processing requirements: " + "load/save files of most popular formats, enhance, transform, display, " + "reduce colors, combine images, draw imagery, etc."; // Measure the text size. System.Drawing.SizeF size = font.MeasureText(text, rect.Width, rect.Height, true, 0); Aurigma.GraphicsMill.Drawing.SolidBrush blackBrush = new Aurigma.GraphicsMill.Drawing.SolidBrush(Aurigma.GraphicsMill.RgbColor.Black); graphics.DrawText(text, font, blackBrush, rect, true, 0); Aurigma.GraphicsMill.Drawing.SolidBrush redBrush = new Aurigma.GraphicsMill.Drawing.SolidBrush(Aurigma.GraphicsMill.RgbColor.Red); text = "Height: " + size.Height.ToString(); graphics.DrawString(text, font, redBrush, size.Width + 1, 0); text = "Width: " + size.Width.ToString(); graphics.DrawString(text, font, redBrush, size.Width + 1, 20);
One more kind of the multiline text is the formatted text. To draw and measure such text, Graphics Mill for .NET provides GdiGraphics.DrawFormattedText and Font.MeasureFormattedText methods, respectively. Both these methods are similar to corresponding ones intended for single-style text. Similar to Font.MeasureText, the Font.MeasureFormattedText method should accept the same arguments as the GdiGraphics.DrawFormattedText.
The figure below can be drawn using the following code sample:
' Create Bitmap object. Dim bitmap As New Aurigma.GraphicsMill.Bitmap(220, 100, Aurigma.GraphicsMill.PixelFormat.Format24bppRgb) bitmap.Unit = Aurigma.GraphicsMill.Unit.Point Dim graphics As Aurigma.GraphicsMill.Drawing.GdiGraphics = bitmap.GetGdiGraphics() ' Fill background. graphics.FillRectangle(New Aurigma.GraphicsMill.Drawing.SolidBrush( _ Aurigma.GraphicsMill.RgbColor.White), 0, 0, bitmap.Width, bitmap.Height) ' Adjust font settings. Dim font As New Aurigma.GraphicsMill.Drawing.Font("Tahoma", 12) Dim rect As New System.Drawing.RectangleF(0, 0, 150, 100) Dim text As String = "<root><para style=""_line-spacing:10px""><span style=""font-weight:bold"">" & _ "Aurigma Graphics Mill</span> is a set of powerful, fast, and memory-friendly components " & _ "which resolve most image processing requirements: load/save files of most popular formats, " & _ "enhance, transform, display, reduce colors, combine images, draw imagery, etc.</para></root>" ' Measure the text size. Dim size As System.Drawing.SizeF = font.MeasureFormattedText(text, rect.Width, rect.Height, True, 0) Dim blackBrush As New Aurigma.GraphicsMill.Drawing.SolidBrush(Aurigma.GraphicsMill.RgbColor.Black) graphics.DrawFormattedText(text, font, blackBrush, rect, True, 0) Dim redBrush As New Aurigma.GraphicsMill.Drawing.SolidBrush(Aurigma.GraphicsMill.RgbColor.Red) text = "Height: " & size.Height graphics.DrawString(text, font, redBrush, size.Width + 1, 0) text = "Width: " & size.Width graphics.DrawString(text, font, redBrush, size.Width + 1, 20)
// Create Bitmap object. Aurigma.GraphicsMill.Bitmap bitmap = new Aurigma.GraphicsMill.Bitmap(220, 100, Aurigma.GraphicsMill.PixelFormat.Format24bppRgb); bitmap.Unit = Aurigma.GraphicsMill.Unit.Point; Aurigma.GraphicsMill.Drawing.GdiGraphics graphics = bitmap.GetGdiGraphics(); // Fill background. graphics.FillRectangle(new Aurigma.GraphicsMill.Drawing.SolidBrush( Aurigma.GraphicsMill.RgbColor.White), 0, 0, bitmap.Width, bitmap.Height); // Adjust font settings. Aurigma.GraphicsMill.Drawing.Font font = new Aurigma.GraphicsMill.Drawing.Font("Tahoma", 12); System.Drawing.RectangleF rect = new System.Drawing.RectangleF(0, 0, 150, 100); string text = "<root><para style=\"_line-spacing:10px\"><span style=\"font-weight:bold\">" + "Aurigma Graphics Mill</span> is a set of powerful, fast, and memory-friendly components " + "which resolve most image processing requirements: load/save files of most popular formats, " + "enhance, transform, display, reduce colors, combine images, draw imagery, etc.</para></root>"; // Measure the text size. System.Drawing.SizeF size = font.MeasureFormattedText(text, rect.Width, rect.Height, true, 0); Aurigma.GraphicsMill.Drawing.SolidBrush blackBrush = new Aurigma.GraphicsMill.Drawing.SolidBrush(Aurigma.GraphicsMill.RgbColor.Black); graphics.DrawFormattedText(text, font, blackBrush, rect, true, 0); Aurigma.GraphicsMill.Drawing.SolidBrush redBrush = new Aurigma.GraphicsMill.Drawing.SolidBrush(Aurigma.GraphicsMill.RgbColor.Red); text = "Height: " + size.Height.ToString(); graphics.DrawString(text, font, redBrush, size.Width + 1, 0); text = "Width: " + size.Width.ToString(); graphics.DrawString(text, font, redBrush, size.Width + 1, 20);