To draw single-line text, Graphics Mill for .NET provides method DrawString of the GdiGraphics class. The following should be passed into this method:
Some overloads of this method requires additional parameters to provide more features like outlined text drawing.
Let's examine a simple code example which draws the following text:
Here is a code sample:
Dim bitmap As New Aurigma.GraphicsMill.Bitmap( _ Aurigma.GraphicsMill.RgbColor.White, 300, 30, _ Aurigma.GraphicsMill.PixelFormat.Format24bppRgb) Dim graphics As Aurigma.GraphicsMill.Drawing.GdiGraphics = bitmap.GetGdiGraphics 'Draw text Dim font As New Aurigma.GraphicsMill.Drawing.Font("Futura Md BT", 20) font.Bold = False font.Italic = True font.Underline = True font.Strikeout = False font.HorizontalAlignment = Aurigma.GraphicsMill.Drawing.HorizontalAlignment.Center Dim brush As New Aurigma.GraphicsMill.Drawing.SolidBrush( _ Aurigma.GraphicsMill.RgbColor.Red) graphics.DrawString("Sample text", font, brush, 150, 0)
Aurigma.GraphicsMill.Bitmap bitmap = new Aurigma.GraphicsMill.Bitmap( Aurigma.GraphicsMill.RgbColor.White, 300, 30, Aurigma.GraphicsMill.PixelFormat.Format24bppRgb); Aurigma.GraphicsMill.Drawing.GdiGraphics graphics = bitmap.GetGdiGraphics(); //Draw text Aurigma.GraphicsMill.Drawing.Font font = new Aurigma.GraphicsMill.Drawing.Font("Futura Md BT", 20); font.Bold = false; font.Italic = true; font.Underline = true; font.Strikeout = false; font.HorizontalAlignment = Aurigma.GraphicsMill.Drawing.HorizontalAlignment.Center; Aurigma.GraphicsMill.Drawing.SolidBrush brush = new Aurigma.GraphicsMill.Drawing.SolidBrush(Aurigma.GraphicsMill.RgbColor.Red); graphics.DrawString("Sample text", font, brush, 150, 0);
Coordinates of the text can be treated in different ways. The interpretation of these coordinates depend on the text alignment (horizontal and vertical). Horizontal alignment can be modified with HorizontalAlignment property of the Font class. It specifies whether X coordinate is a beginning (left position), center, or end (right position) of the text:
This figure was produced with the following code:
'Create Bitmap object Dim bitmap As New Aurigma.GraphicsMill.Bitmap( _ Aurigma.GraphicsMill.RgbColor.White, 100, 100, _ Aurigma.GraphicsMill.PixelFormat.Format24bppRgb) Dim graphics As Aurigma.GraphicsMill.Drawing.GdiGraphics = bitmap.GetGdiGraphics Dim pen As New Aurigma.GraphicsMill.Drawing.Pen(Aurigma.GraphicsMill.RgbColor.Red, 1) graphics.DrawLine(pen, 50, 0, 50, 100) Dim brush As New Aurigma.GraphicsMill.Drawing.SolidBrush( _ Aurigma.GraphicsMill.RgbColor.Black) ' Adjust font settings Dim font As New Aurigma.GraphicsMill.Drawing.Font("Arial", 20, False, False) 'Draw text with different horizontal alignments font.HorizontalAlignment = Aurigma.GraphicsMill.Drawing.HorizontalAlignment.Left graphics.DrawString("Left", font, brush, 50, 0) font.HorizontalAlignment = Aurigma.GraphicsMill.Drawing.HorizontalAlignment.Center graphics.DrawString("Center", font, brush, 50, 33) font.HorizontalAlignment = Aurigma.GraphicsMill.Drawing.HorizontalAlignment.Right graphics.DrawString("Right", font, brush, 50, 63)
Aurigma.GraphicsMill.Bitmap bitmap = new Aurigma.GraphicsMill.Bitmap( Aurigma.GraphicsMill.RgbColor.White, 100, 100, Aurigma.GraphicsMill.PixelFormat.Format24bppRgb); Aurigma.GraphicsMill.Drawing.GdiGraphics graphics = bitmap.GetGdiGraphics(); Aurigma.GraphicsMill.Drawing.Pen pen = new Aurigma.GraphicsMill.Drawing.Pen( Aurigma.GraphicsMill.RgbColor.Red, 1); graphics.DrawLine(pen, 50, 0, 50, 100); Aurigma.GraphicsMill.Drawing.SolidBrush brush = new Aurigma.GraphicsMill.Drawing.SolidBrush(Aurigma.GraphicsMill.RgbColor.Black); //Adjust font settings Aurigma.GraphicsMill.Drawing.Font font = new Aurigma.GraphicsMill.Drawing.Font("Arial", 20, false, false); //Draw text with different horizontal alignments font.HorizontalAlignment = Aurigma.GraphicsMill.Drawing.HorizontalAlignment.Left; graphics.DrawString("Left", font, brush, 50, 0); font.HorizontalAlignment = Aurigma.GraphicsMill.Drawing.HorizontalAlignment.Center; graphics.DrawString("Center", font, brush, 50, 33); font.HorizontalAlignment = Aurigma.GraphicsMill.Drawing.HorizontalAlignment.Right; graphics.DrawString("Right", font, brush, 50, 63);
Vertical alignment can be modified with VerticalAlignment property of the Font class. It specifies whether Y coordinate specifies top, bottom or baseline level of the text:
This figure was created with the following code:
Dim bitmap As New Aurigma.GraphicsMill.Bitmap( _ Aurigma.GraphicsMill.RgbColor.White, 200, 60, _ Aurigma.GraphicsMill.PixelFormat.Format24bppRgb) Dim graphics As Aurigma.GraphicsMill.Drawing.GdiGraphics = bitmap.GetGdiGraphics Dim pen As New Aurigma.GraphicsMill.Drawing.Pen(Aurigma.GraphicsMill.RgbColor.Red, 1) graphics.DrawLine(pen, 0, 30, 200, 30) Dim brush As New Aurigma.GraphicsMill.Drawing.SolidBrush(Aurigma.GraphicsMill.RgbColor.Black) ' Adjust font settings Dim font As New Aurigma.GraphicsMill.Drawing.Font("Arial", 20, False, False) font.HorizontalAlignment = Aurigma.GraphicsMill.Drawing.HorizontalAlignment.Left 'Draw text with different vertical alignments font.VerticalAlignment = Aurigma.GraphicsMill.Drawing.VerticalAlignment.Bottom graphics.DrawString("Bottom", font, brush, 0, 30) font.VerticalAlignment = Aurigma.GraphicsMill.Drawing.VerticalAlignment.Baseline graphics.DrawString("Baseline", font, brush, 80, 30) font.VerticalAlignment = Aurigma.GraphicsMill.Drawing.VerticalAlignment.Top graphics.DrawString("Top", font, brush, 160, 30)
Aurigma.GraphicsMill.Bitmap bitmap = new Aurigma.GraphicsMill.Bitmap( Aurigma.GraphicsMill.RgbColor.White, 200, 60, Aurigma.GraphicsMill.PixelFormat.Format24bppRgb); Aurigma.GraphicsMill.Drawing.GdiGraphics graphics = bitmap.GetGdiGraphics(); Aurigma.GraphicsMill.Drawing.Pen pen = new Aurigma.GraphicsMill.Drawing.Pen(Aurigma.GraphicsMill.RgbColor.Red, 1); graphics.DrawLine(pen, 0, 30, 200, 30); Aurigma.GraphicsMill.Drawing.SolidBrush brush = new Aurigma.GraphicsMill.Drawing.SolidBrush(Aurigma.GraphicsMill.RgbColor.Black); //Adjust font settings Aurigma.GraphicsMill.Drawing.Font font = new Aurigma.GraphicsMill.Drawing.Font("Arial", 20, false, false); font.HorizontalAlignment = Aurigma.GraphicsMill.Drawing.HorizontalAlignment.Left; //Draw text with different vertical alignments font.VerticalAlignment = Aurigma.GraphicsMill.Drawing.VerticalAlignment.Bottom; graphics.DrawString("Bottom", font, brush, 0, 30); font.VerticalAlignment = Aurigma.GraphicsMill.Drawing.VerticalAlignment.Baseline; graphics.DrawString("Baseline", font, brush, 80, 30); font.VerticalAlignment = Aurigma.GraphicsMill.Drawing.VerticalAlignment.Top; graphics.DrawString("Top", font, brush, 160, 30);
To draw rotated text, like this:
you should set rotation matrix into Transform property of the GdiGraphics before drawing the text:
'Create Bitmap object Dim bitmap As New Aurigma.GraphicsMill.Bitmap( _ Aurigma.GraphicsMill.RgbColor.White, 120, 120, _ Aurigma.GraphicsMill.PixelFormat.Format24bppRgb) Dim graphics As Aurigma.GraphicsMill.Drawing.GdiGraphics = bitmap.GetGdiGraphics Dim pen As New Aurigma.GraphicsMill.Drawing.Pen(Aurigma.GraphicsMill.RgbColor.Black, 1) Dim brush As New Aurigma.GraphicsMill.Drawing.SolidBrush(Aurigma.GraphicsMill.RgbColor.Black) 'Adjust font settings Dim font As New Aurigma.GraphicsMill.Drawing.Font("Tahoma", 20) font.HorizontalAlignment = Aurigma.GraphicsMill.Drawing.HorizontalAlignment.Center font.VerticalAlignment = Aurigma.GraphicsMill.Drawing.VerticalAlignment.Bottom 'Draw rotated line and text Dim matrix As New System.Drawing.Drawing2D.Matrix matrix.RotateAt(45, New System.Drawing.PointF(60, 60)) graphics.Transform = matrix graphics.DrawLine(pen, -30, 60, 150, 60) graphics.DrawString("Sample text", font, brush, 60, 60)
//Create Bitmap object Aurigma.GraphicsMill.Bitmap bitmap = new Aurigma.GraphicsMill.Bitmap( Aurigma.GraphicsMill.RgbColor.White, 120, 120, Aurigma.GraphicsMill.PixelFormat.Format24bppRgb); Aurigma.GraphicsMill.Drawing.GdiGraphics graphics = bitmap.GetGdiGraphics(); Aurigma.GraphicsMill.Drawing.Pen pen = new Aurigma.GraphicsMill.Drawing.Pen(Aurigma.GraphicsMill.RgbColor.Black, 1); Aurigma.GraphicsMill.Drawing.SolidBrush brush = new Aurigma.GraphicsMill.Drawing.SolidBrush(Aurigma.GraphicsMill.RgbColor.Black); //Adjust font settings Aurigma.GraphicsMill.Drawing.Font font = new Aurigma.GraphicsMill.Drawing.Font("Tahoma", 20); font.HorizontalAlignment = Aurigma.GraphicsMill.Drawing.HorizontalAlignment.Center; font.VerticalAlignment = Aurigma.GraphicsMill.Drawing.VerticalAlignment.Bottom; //Draw rotated line and text System.Drawing.Drawing2D.Matrix matrix = new System.Drawing.Drawing2D.Matrix(); matrix.RotateAt(45, new System.Drawing.PointF(60, 60)); graphics.Transform = matrix; graphics.DrawLine(pen, -30, 60, 150, 60); graphics.DrawString("Sample text", font, brush, 60, 60);
When you try to draw outlined text on a grayscale bitmap (with Format8bppGrayScale pixel format), you will notice that the text is looking ragged (without antialiasing). The reason of this problem is that neither GDI nor GDI+ support grayscale bitmaps, and therefore Graphics Mill for .NET has to imitate it as Format8bppIndexed bitmap with grayscale palette. However, antialiasing is impossible on indexed bitmaps.