Skip to content

Instantly share code, notes, and snippets.

@seancallaway
Created April 30, 2016 13:30
Show Gist options
  • Save seancallaway/81e6a76190c4b18dbddb5ac7ec45cd6d to your computer and use it in GitHub Desktop.
Save seancallaway/81e6a76190c4b18dbddb5ac7ec45cd6d to your computer and use it in GitHub Desktop.
Code For Merging TIFFs in C#
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;
private static void MergeTiffs(List<Bitmap> bmps, string filename)
{
// Save first bitmap to memory as TIFF
MemoryStream byteStream = new MemoryStream();
bmps[0].Save(byteStream, ImageFormat.Tiff);
Image tiff = Image.FromStream(byteStream);
// Prepare encoders
ImageCodecInfo encInfo = GetEncoderInfo("image/tiff");
EncoderParameters encParams = new EncoderParameters(2);
EncoderParameter param = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionCCITT4);
encParams.Param[0] = param;
param = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.MultiFrame);
encParams.Param[1] = param;
// Save to file
tiff.Save(filename, encInfo, encParams);
for (int i = 1; i < bmps.Count; i++)
{
EncoderParameters encoderParams = new EncoderParameters(2);
EncoderParameter SaveParam = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage);
EncoderParameter CompParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionCCITT4);
encoderParams.Param[0] = CompParam;
encoderParams.Param[1] = SaveParam;
bmps[i].Save(byteStream, ImageFormat.Tiff);
tiff.SaveAdd(Image.FromStream(byteStream), encoderParams);
}
EncoderParameter FlushParam = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.Flush);
encParams = new EncoderParameters(1);
encParams.Param[0] = FlushParam;
tiff.SaveAdd(encParams);
}
private static ImageCodecInfo GetEncoderInfo(String mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment