Please help me! The code below creates perfect output file son windows 7 and 2012 but on windows 2008 and win 2003 the generated images are corrupted without generating any exception during the process.
Both win 2008 and win 2003 are up to date. What do I have to install? Some hotfix? Please help me I'm stuck.
public void appendTiffs(string tiff1inputFilePath, string tiff2inputFilePath, string outputFilePath)
{
Stream imageStreamSource = null;
try
{
//Prepare encoders:
System.Drawing.Imaging.ImageCodecInfo encoderInfo = getEncoderInfo("image/tiff");
System.Drawing.Imaging.EncoderParameters encoderParams = new System.Drawing.Imaging.EncoderParameters(2);
System.Drawing.Imaging.EncoderParameter compressionEncodeParam =
new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)System.Drawing.Imaging.EncoderValue.CompressionLZW);
System.Drawing.Imaging.EncoderParameter saveEncodeParam =
new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)System.Drawing.Imaging.EncoderValue.MultiFrame);
encoderParams.Param[0] = compressionEncodeParam;
encoderParams.Param[1] = saveEncodeParam;
int numberOfPages = getNumberOfPages(tiff1inputFilePath);
MemoryStream byteStream;
imageStreamSource = new FileStream(tiff1inputFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
System.Drawing.Bitmap sourceBitmap = (System.Drawing.Bitmap)getTifPage(imageStreamSource, 0, out byteStream);
System.Drawing.Bitmap outputBitmap;
outputBitmap = (System.Drawing.Bitmap)System.Drawing.Image.FromStream(byteStream);
outputBitmap.Save(outputFilePath, encoderInfo, encoderParams);
//For subsequent pages, prepare encoders:
saveEncodeParam =
new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)System.Drawing.Imaging.EncoderValue.FrameDimensionPage);
encoderParams.Param[1] = saveEncodeParam;
for (int i = 1; i < numberOfPages; i++)
{
sourceBitmap.Dispose();
byteStream.Close();
byteStream.Dispose();
sourceBitmap = (System.Drawing.Bitmap)getTifPage(imageStreamSource, i, out byteStream);
sourceBitmap.Save(byteStream, System.Drawing.Imaging.ImageFormat.Tiff);
System.Drawing.Bitmap tmpOutputBitmap = (System.Drawing.Bitmap)System.Drawing.Image.FromStream(byteStream);
outputBitmap.SaveAdd(tmpOutputBitmap, encoderParams);
}
sourceBitmap.Dispose();
byteStream.Close();
byteStream.Dispose();
imageStreamSource.Close();
imageStreamSource.Dispose();
imageStreamSource = new FileStream(tiff2inputFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
numberOfPages = getNumberOfPages(tiff2inputFilePath);
for (int i = 0; i < numberOfPages; i++)
{
sourceBitmap.Dispose();
byteStream.Close();
byteStream.Dispose();
sourceBitmap = (System.Drawing.Bitmap)getTifPage(imageStreamSource, i, out byteStream);
sourceBitmap.Save(byteStream, System.Drawing.Imaging.ImageFormat.Tiff);
System.Drawing.Bitmap tmpOutputBitmap = (System.Drawing.Bitmap)System.Drawing.Image.FromStream(byteStream);
outputBitmap.SaveAdd(tmpOutputBitmap, encoderParams);
}
//Finally flush the file:
saveEncodeParam = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)System.Drawing.Imaging.EncoderValue.Flush);
encoderParams = new System.Drawing.Imaging.EncoderParameters(1);
encoderParams.Param[0] = saveEncodeParam;
outputBitmap.SaveAdd(encoderParams);
}
finally
{
imageStreamSource.Close();
imageStreamSource.Dispose();
}
}