ImageTypesInTiff.cs
// 
// このコードは、DioDocs for Imaging のサンプルの一部として提供されています。
// © 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;

namespace DsImagingWeb.Demos
{
    // このサンプルでは、カラー JPEG 画像を白黒やグレースケールなどの
    // 異なる画像形式に変換し、それらの画像からマルチフレーム TIFF を作成する方法を示します。
    public class ImageTypesInTiff
    {
        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 ms = new MemoryStream();
            using (var tw = new GcTiffWriter(ms))
            using (var bmp = new GcBitmap(path))
            {
                // この写真では、グリーンチャネルを使用するとわずかに良い結果が得られます。
                // ディザリングによって生成される、より高品質な2値画像については、DitheringInTiffを参照してください。
                using (var f = bmp.ToBilevelBitmap(ColorChannel.Green))
                    tw.AppendFrame(f);
                using (var f = bmp.ToGrayscaleBitmap())
                    tw.AppendFrame(f);
                // 4bppでは8〜16色を使用できます。ここでは最大値(16)を使用します。
                using (var f = bmp.ToIndexed4bppBitmap(16))
                    tw.AppendFrame(f);
                // 8bppでは8〜256色を使用できます。ここでは最大値(256)を使用します。
                using (var f = bmp.ToIndexed8bppBitmap(256))
                    tw.AppendFrame(f);
                tw.AppendFrame(bmp);
            }
            ms.Seek(0, SeekOrigin.Begin);
            return ms;
        }
    }
}