TrueTypeHinting.cs
- //
- // This code is part of Document Solutions for Imaging demos.
- // Copyright (c) MESCIUS inc. All rights reserved.
- //
- using System;
- using System.IO;
- using System.Drawing;
- using GrapeCity.Documents.Imaging;
- using GrapeCity.Documents.Text;
- using GrapeCity.Documents.Drawing;
- using GCTEXT = GrapeCity.Documents.Text;
- using GCDRAW = GrapeCity.Documents.Drawing;
-
- namespace DsImagingWeb.Demos
- {
- // This sample demonstrates how to use TrueType font hinting instructions.
- //
- // Many TrueType fonts include low-level hinting instructions.
- // The original purpose of introducing hinting instructions was
- // to improve the look of glyphs when the font size is comparable
- // to the device resolution.
- // Such instructions are also used (especially in CJK fonts)
- // to reuse some glyph parts in different glyphs regardless of the font size.
- // GcGraphics supports hinting instructions. To enable it, set
- // TextFormat.EnableFontHinting property to true when rendering text.
- //
- // This sample renders a string using small sans-serif and serif fonts
- // with hinting turned OFF and ON.
- public class TrueTypeHinting
- {
- public GcBitmap GenerateImage(Size pixelSize, float dpi, bool opaque, string[] sampleParams = null)
- {
- var bmp = new GcBitmap(pixelSize.Width, pixelSize.Height, true, dpi, dpi);
- var dy = dpi / 2;
- var ip = new PointF(dpi, dpi);
- using (var g = bmp.CreateGraphics(Color.White))
- {
- // Turning anti-aliasing off makes the hinting effect on small text more obvious:
- g.Renderer.Aliased = true;
-
- var sOff = "Hinting OFF: ";
- var sOn = "Hinting ON: ";
-
- // Draw a string with hinting instructions off and on:
- var text = "The quick brown fox jumps over the lazy dog.";
-
- var tf = new TextFormat()
- {
- Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "FreeSans.ttf")),
- FontSize = 12,
- EnableFontHinting = false
- };
- g.DrawString(sOff + text, tf, ip);
- ip.Y += dy;
- tf.FontSize = 10;
- g.DrawString(sOff + text, tf, ip);
- ip.Y += dy * 2;
-
- tf.EnableFontHinting = true;
- tf.FontSize = 12;
- g.DrawString(sOn + text, tf, ip);
- ip.Y += dy;
- tf.FontSize = 10;
- g.DrawString(sOn + text, tf, ip);
- ip.Y += dy * 2;
-
- // Draw the same string with a serif font:
- tf.Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "FreeSerif.ttf"));
- tf.EnableFontHinting = false;
- tf.FontSize = 12;
- g.DrawString(sOff + text, tf, ip);
- ip.Y += dy;
- tf.FontSize = 10;
- g.DrawString(sOff + text, tf, ip);
- ip.Y += dy * 2;
-
- tf.EnableFontHinting = true;
- tf.FontSize = 12;
- g.DrawString(sOn + text, tf, ip);
- ip.Y += dy;
- tf.FontSize = 10;
- g.DrawString(sOn + text, tf, ip);
- ip.Y += dy * 2;
- }
- // Done:
- return bmp;
- }
- }
- }
-