Объединение нескольких файлов TIFF в один файл TIFF - PullRequest
1 голос
/ 02 мая 2011

Я пытался использовать метод mergeTiffStreams класса TiffUtil, размещенный по адресу:

http://kseesharp.blogspot.com/2007/12/class-for-tiff-manipulation.html

Однако, как и другие люди прокомментировали этот поток, конечный результатчто я получаю поток, который содержит только мой первый файл TIFF.Другие TIFF, которые я передал в массиве MemoryStream, не включены.

Кто-нибудь еще сталкивался с этой проблемой раньше?Если это так, то любой совет будет наиболее ценным.

Спасибо.

[ОБНОВЛЕНИЕ]

Вот код, который у меня есть на данный момент.Возвращаемый поток содержит только первый TIFF из переданного массива.

    public MemoryStream mergeTiffStreams(MemoryStream[] tiffStreams)
    {
        if (tiffStreams == null)
            throw new ArgumentNullException("tiffStreams");

        Encoder enc = Encoder.SaveFlag;

        ImageCodecInfo info = null;
        foreach (ImageCodecInfo ice in ImageCodecInfo.GetImageEncoders())
            if (ice.MimeType == "image/tiff")
                info = ice;

        EncoderParameters ep = new EncoderParameters(1);
        ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.MultiFrame);
        MemoryStream tiffStream = new MemoryStream();
        Bitmap masterBitmap = new Bitmap(tiffStreams[0]);
        masterBitmap.Save(tiffStream, info, ep);

        ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.FrameDimensionPage);
        for (int x = 1; x < tiffStreams.Length; x++)
        {
            masterBitmap.SaveAdd(Image.FromStream(tiffStreams[x]), ep);
        }

        ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.Flush);
        masterBitmap.SaveAdd(ep);

        return tiffStream;
    }

1 Ответ

1 голос
/ 23 ноября 2014

Ваша проблема может заключаться в том, как вы обрабатываете возвращенный поток. Если, например, вы хотите сохранить его в IO, используйте:

File.WriteAllBytes(myPath, tiffStream.ToArray());

вместо создания нового объекта Bitmap из потока. В любом случае это была моя проблема.

...