C#と諸々

C#がメインで他もまぁ諸々なブログです
おかしなこと書いてたら指摘してくれると嬉しいです(´・∀・`)
つーかコメント欲しい(´・ω・`)

2007/09/17 21:28
けっこうややこしいのでメモ。

// using System;
// using System.Drawing;
// using System.Drawing.Imaging;
// using System.IO;

static void Main()
{
    Image page1 = new Bitmap("C:\\work\\page3.bmp");
    Image page2 = new Bitmap("C:\\work\\page3.bmp");
    Image page3 = new Bitmap("C:\\work\\page3.bmp");

    // TIFF 形式のエンコーダ。
    ImageCodecInfo[] imageEncoders = ImageCodecInfo.GetImageEncoders();
    Predicate<ImageCodecInfo> tiffEncoderPredicate =
        delegate(ImageCodecInfo input)
        {
            return (input.FormatID == ImageFormat.Tiff.Guid);
        };
    ImageCodecInfo tiffEncoder = Array.Find(imageEncoders, tiffEncoderPredicate);

    // エンコーダのパラメータ。
    EncoderParameters tiffEncoderParameters = new EncoderParameters(2);
    tiffEncoderParameters.Param[0] = new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.MultiFrame);
    tiffEncoderParameters.Param[1] = new EncoderParameter(Encoder.Compression, (long)EncoderValue.CompressionNone);

    // 作業領域となるメモリストリーム。
    MemoryStream tiffStream = new MemoryStream();
    // Save メソッドによって、1ページ目が保存され、更に Image オブジェクトとメモリストリームが関連付けられる。
    page1.Save(tiffStream, tiffEncoder, tiffEncoderParameters);

    // 2ページ目, 3ページ目の保存に使用するエンコーダのパラメータ。
    EncoderParameters pageEncoderParameters = new EncoderParameters(2);
    pageEncoderParameters.Param[0] = new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage);
    pageEncoderParameters.Param[1] = new EncoderParameter(Encoder.Compression, (long)EncoderValue.CompressionNone);

    // 先ほどの Save メソッドで関連付けられたメモリストリームに対して保存される。
    // この操作は page1 にフレームを追加するわけではない。
    page1.SaveAdd(page2, pageEncoderParameters);
    page1.SaveAdd(page3, pageEncoderParameters);

    // メモリストリームの内容をファイルに保存する。
    File.WriteAllBytes("C:\\work\\test.tif", tiffStream.ToArray());
}



EncoderParameter のインスタンスを生成する際、EncoderValue 列挙値を long にキャストして渡しています。これは int ではなく long にしなければいけません。でないと失敗します。

サンプルなんで Dispose メソッドは呼び出してません。Image, MemoryStream  以外にも、EncoderParameters や EncoderParameter も IDisposable を実装してます。
スポンサーサイト



タグ: .NET C# 画像処理