C#中的Tiff文件压缩

9

我有一个tiff文件,在创建和保存时压缩类型为"LZW"。

System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(800, 1000); 
Graphics g = Graphics.FromImage(bitmap);
fileName = saveDirectory + id + ".tif";
bitmap.Save(fileName, ImageFormat.Tiff);

我正在尝试将其压缩方式更改为CCIT:

Bitmap myBitmap;
myBitmap = new Bitmap(fileName);
ImageCodecInfo myImageCodecInfo;
myImageCodecInfo = GetEncoderInfo("image/tiff");
System.Drawing.Imaging.Encoder myEncoder;
myEncoder = System.Drawing.Imaging.Encoder.Compression;
EncoderParameters myEncoderParameters;
myEncoderParameters = new EncoderParameters(1);
EncoderParameter myEncoderParameter;      
myEncoderParameter = new EncoderParameter(myEncoder,(long)EncoderValue.CompressionCCITT4);
myEncoderParameters.Param[0] = myEncoderParameter;
myBitmap.Save(new_fileName);

    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;
    }

然而,经过处理之后,我的文件属性仍显示为“LZW压缩”类型。

有人可以解释一下我做错了什么吗?


查看此问题的回答将TIFF LZW转换为CCITT - Logarr
不是对我的原问题的解释。但是谢谢你提供的链接。 - Philo
1个回答

12

将您的最后一行改为:

myBitmap.Save(new_fileName, myImageCodecInfo, myEncoderParameters);

啊,糟糕。完全忘记应用编码了...谢谢你! - Philo
还有一个问题。如果我想删除旧文件并将新文件保存为旧文件名,该怎么办? - Philo
1
有几种方法可以实现这个。我可能会创建一个新的 Bitmap,并使用 Graphics 将我的图像复制到它上面,这样我就可以关闭对原始图像的引用(它保持打开状态)。这样做,你就可以直接在上面 Save() - Nick Gotch
图像具有明显的特征,并且与所有其他压缩类型兼容,除了我需要的CCITT类型...使用CCITT压缩时,生成的图像全部是黑色的,就像是一个图层。 - Philo
嗨,尼克,我添加了一个新问题,关于我遇到的问题...你能帮忙吗?https://dev59.com/O6Lms4cB2Jgan1znM2uL - Philo
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接