在一个TIFF文件中合并多个TIFF文件

时间:2011-05-02 18:45:25

标签: .net tiff

我一直在尝试使用发布在的TiffUtil类的mergeTiffStreams方法:

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

然而,就像其他人对该主题发表评论一样,最终结果是我收到的流只包含我的第一个TIFF文件。我没有包含我在MemoryStream数组中传递的其他TIFF。

之前是否有其他人遇到此问题?如果是这样,任何建议都会受到最高的赞赏。

感谢。

[UPDATE]

这是我目前的代码。它返回的流只包含传入数组的第一个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 个答案:

答案 0 :(得分:1)

您的问题可能在于您如何处理返回的流。例如,如果要将其保存到IO,请使用:

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

而不是从流中创建新的Bitmap对象。无论如何,那是我的问题。