//
// 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 takes a color JPEG, and creates bi-level bitmaps from it
// using all available dithering methods. The resulting b/w images
// are added as frames to a multi-frame TIFF.
// The original color image is added as the last page.
public class DitheringInTiff
{
public string DefaultMime { get => Common.Util.MimeTypes.TIFF; }
public Stream GenerateImageStream(string targetMime, Size pixelSize, float dpi, bool opaque, string[] sampleParams = null)
{
if (targetMime != Common.Util.MimeTypes.TIFF)
throw new Exception("This sample only supports TIFF output format.");
var path = Path.Combine("Resources", "Images", "minerva.jpg");
var font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "cour.ttf"));
var ms = new MemoryStream();
using (var tw = new GcTiffWriter(ms))
using (var bmp = new GcBitmap(path))
{
// Create text layout for labels:
var tl = new TextLayout(bmp.DpiX);
tl.DefaultFormat.Font = font;
tl.DefaultFormat.FontSize = 16;
tl.DefaultFormat.BackColor = Color.White;
// Loop through all dithering methods (starting with no dithering):
var methods = typeof(DitheringMethod).GetEnumValues();
foreach (DitheringMethod method in methods)
{
using (var tbmp = bmp.Clone())
{
// Apply dithering:
tbmp.ApplyEffect(DitheringEffect.Get(method));
// Draw label:
tl.Clear();
tl.Append(method.ToString());
tl.PerformLayout(true);
using (var g = tbmp.CreateGraphics())
g.DrawTextLayout(tl, new PointF(0, tbmp.Height - tl.ContentHeight));
// Convert to bi-level bitmap:
using (var f = tbmp.ToBilevelBitmap())
tw.AppendFrame(f);
}
}
// Add original image:
tw.AppendFrame(bmp);
}
ms.Seek(0, SeekOrigin.Begin);
return ms;
}
}
}