Windows > Software Development for Windows Client Forums > Windows Imaging Component (WIC) > Problem encoding TIFF, the compression is always LZW
Ask a questionAsk a question
 

AnswerProblem encoding TIFF, the compression is always LZW

  • Wednesday, October 28, 2009 3:59 PMNazza Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Has Code
    Hi, I'm trying to encode a Bitmap array to a multipage TIFF.
    The Bitmaps are 1 bit depth (verified), I force the CCITT4compression, but the result is always LZW compression.

    The code:
    Bitmap[] IncomingArray;
    MemoryStream _stream = new MemoryStream();
    Image TempImage;
    
    Encoder myEncoder = Encoder.SaveFlag;
    
    ImageCodecInfo infoEncoder = GetEncoderInf(ImageFormat.Tiff);
                foreach (ImageCodecInfo ici in ImageCodecInfo.GetImageEncoders())
                    if (ici.MimeType == "image/tiff")
                        infoEncoder = ici;
                
    EncoderParameters myEncoderParameters = new EncoderParameters(2);
    myEncoderParameters.Param[0] = new EncoderParameter(myEncoder, (long)EncoderValue.MultiFrame);
    myEncoderParameters.Param[1] = new EncoderParameter(myEncoder, (long)EncoderValue.CompressionCCITT4);
            
    TempImage = (Image)IncomingArray[0];
                
    TempImage.Save(_stream, infoEncoder, myEncoderParameters);
                
                if (IncomingArray.Length > 1)
                {
                    myEncoderParameters.Param[0] = new EncoderParameter(myEncoder, (long)EncoderValue.FrameDimensionPage);
    
    for (int iCount = 1; iCount < IncomingArray.Length; iCount++)
                    {
                        TempImage.SaveAdd((Image)IncomingArray[iCount], myEncoderParameters);
                    }
                }
    myEncoderParameters.Param[0] = new EncoderParameter(myEncoder, (long)EncoderValue.Flush);
                TempImage.SaveAdd(myEncoderParameters);
    
                //_stream.Seek(0, SeekOrigin.Begin);
    
    _stream.Position = 0;
    File.WriteAllBytes("c:\\test.tif", _stream.ToArray());
    
    

    Looking at tags, test.tif is 1 bit depth, but is encoded LZW...

    If the image is 1 bit depth, why it isn't compressed CCITT4 ?

     

Answers

  • Tuesday, November 03, 2009 3:06 PMNazza Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer

    Solved !

    Simply changed:
    myEncoderParameters.Param[1] = new EncoderParameter(myEncoder, (long)EncoderValue.CompressionCCITT4);

    with:
    myEncoderParameters.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionCCITT4);

    The compression type works only if associated to the right Encoder.

    • Marked As Answer byNazza Tuesday, November 03, 2009 3:07 PM
    •  

All Replies

  • Tuesday, November 03, 2009 3:06 PMNazza Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer

    Solved !

    Simply changed:
    myEncoderParameters.Param[1] = new EncoderParameter(myEncoder, (long)EncoderValue.CompressionCCITT4);

    with:
    myEncoderParameters.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionCCITT4);

    The compression type works only if associated to the right Encoder.

    • Marked As Answer byNazza Tuesday, November 03, 2009 3:07 PM
    •