public static void CreateTiffImage(Image[] images, string path, TiffCompressType compressType) { if (images == null || images.Length == 0) { return; } if (System.IO.File.Exists(path)) { System.IO.File.Delete(path); } var coderInfo = getCodecForstring("image/tiff"); EncoderParameters encoderParams = null; Image tiffImg = null; if (images.Length == 1) { encoderParams = new EncoderParameters(1); var param1 = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, GetCompressType(compressType)); encoderParams.Param[0] = param1; tiffImg = new Bitmap(images[0]); tiffImg.Save(path, coderInfo, encoderParams); } else { encoderParams = new EncoderParameters(2); var param1 = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.MultiFrame); var param2 = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, GetCompressType(compressType)); encoderParams.Param[0] = param1; encoderParams.Param[1] = param2; using (System.IO.FileStream stream = new System.IO.FileStream(path, System.IO.FileMode.CreateNew)) { tiffImg = new Bitmap(images[0]); tiffImg.Save(stream, coderInfo, encoderParams); for (int i = 1; i < images.Length; i++) { encoderParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage); tiffImg.SaveAdd(images[i], encoderParams); } encoderParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.Flush); tiffImg.SaveAdd(encoderParams); } } }
private static long GetCompressType(TiffCompressType compressType) { switch (compressType) { case TiffCompressType.LZW: return((long)EncoderValue.CompressionLZW); case TiffCompressType.CCITT_GROUP3_MH: return((long)EncoderValue.CompressionCCITT3); case TiffCompressType.CCITT_GROUP4_MMR: return((long)EncoderValue.CompressionCCITT4); case TiffCompressType.PACK_BITS: return((long)EncoderValue.CompressionRle); default: return((long)EncoderValue.CompressionNone); } }