//
// 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 System.Collections.Generic;
using System.Linq;
using GrapeCity.Documents.Drawing;
using GrapeCity.Documents.Text;
using GrapeCity.Documents.Imaging;
using GCTEXT = GrapeCity.Documents.Text;
using GCDRAW = GrapeCity.Documents.Drawing;
namespace DsImagingWeb.Demos
{
// This sample shows the different (anti)aliasing modes of rendering text:
// - No anti-aliasing, very fast but poor quality (not recommended).
// - Fast anti-aliasing. This is the default that provides good quality and fast rendering.
// - Slow anti-aliasing. Highest quality but slower than the default.
public class Antialiasing
{
public GcBitmap GenerateImage(Size pixelSize, float dpi, bool opaque, string[] sampleParams = null)
{
var bmp = new GcBitmap(pixelSize.Width, pixelSize.Height, true, dpi, dpi);
using (var g = bmp.CreateGraphics(Color.FromArgb(unchecked((int)0xffccf2ff))))
{
g.Renderer.Multithreaded = true;
var text = Common.Util.LoremIpsum();
var tsize = new SizeF(bmp.Width / 2, bmp.Height / 2);
var pad = 96f / 4;
var tfcap = new TextFormat()
{
Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "timesbd.ttf")),
FontSize = 16,
};
var tl = g.CreateTextLayout();
tl.DefaultFormat.Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "times.ttf"));
tl.DefaultFormat.FontSize = 14;
tl.TextAlignment = TextAlignment.Justified;
tl.FirstLineIndent = 96 / 2;
tl.ParagraphSpacing = 96 / 8;
tl.MaxWidth = tsize.Width;
tl.MaxHeight = tsize.Height;
tl.MarginAll = pad;
var tloc = PointF.Empty;
using (g.PushClip(new RectangleF(tloc, tsize)))
{
bmp.Renderer.Aliased = true;
tl.AppendLine("No anti-aliasing (worst quality)", tfcap);
tl.Append(text);
tl.PerformLayout(true);
g.DrawTextLayout(tl, tloc);
}
tloc.X += tsize.Width;
using (g.PushClip(new RectangleF(tloc, tsize)))
{
bmp.Renderer.Aliased = false;
bmp.Renderer.SlowAntialiasing = false;
tl.Clear();
tl.AppendLine("Fast anti-aliasing (default quality)", tfcap);
tl.Append(text);
tl.PerformLayout(true);
g.DrawTextLayout(tl, tloc);
}
tloc.X = 0;
tloc.Y += tsize.Height;
using (g.PushClip(new RectangleF(tloc, tsize)))
{
bmp.Renderer.Aliased = false;
bmp.Renderer.SlowAntialiasing = true;
tl.Clear();
tl.AppendLine("Slow anti-aliasing (highest quality)", tfcap);
tl.Append(text);
tl.PerformLayout(true);
g.DrawTextLayout(tl, tloc);
}
}
return bmp;
}
}
}