gpt4 book ai didi

c# - 在 C# 中压缩现有的 TIFF 文件

转载 作者:行者123 更新时间:2023-11-30 22:05:20 24 4
gpt4 key购买 nike

我有数千个 32MB 的 TIFF 文件,因为它们没有添加压缩。我需要遍历它们并使用 LZW 压缩每一个。为了快速完成,我只压缩了单页 TIFF 文件,其中大部分都是这样。

运行此程序时出现一般 GDI+ 错误。但是,如果我在保存时使用不同的文件名,那么它就可以正常工作。

DirectoryInfo d = new DirectoryInfo(@"D:\Data\lzwtest");
FileInfo[] Files = d.GetFiles("*.tif");
foreach (FileInfo file in Files)
{
Bitmap image1 = (Bitmap)Image.FromFile(file.FullName);
int tiffpages = image1.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);
if (tiffpages == 1)
{
image1.Save(@"D:\Data\lzwtest\" + file.Name, myImageCodecInfo, myEncoderParameters);
}
}

如果我将 image1.Save 行更改为以下行,那么它就可以工作(只需在文件名的前面添加一个“test-”。

image1.Save(@"D:\Data\lzwtest\test-" + file.Name, myImageCodecInfo, myEncoderParameters);

非常感谢任何帮助!

最佳答案

您需要为位图使用中间存储。

DirectoryInfo d = new DirectoryInfo(@"D:\Data\lzwtest");
FileInfo[] Files = d.GetFiles("*.tif");
foreach (FileInfo file in Files)
{
using(MemoryStream ms = new MemoryStream(File.ReadAllBytes(file)))
{
Bitmap image1 = (Bitmap)Image.FromStream(ms);
int tiffpages = image1.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);
if (tiffpages == 1)
{
image1.Save(@"D:\Data\lzwtest\" + file.Name, myImageCodecInfo, myEncoderParameters);
}
}
}

问题是 GDI+ 锁定了位图的源,无论它是文件还是流。在这种情况下,我们不关心 MemoryStream 是否被锁定。

并且我希望 GDI+ 的开发人员能够因为这个“一般 GDI+ 错误”而坐在不舒服的椅子上数小时。没有内部异常,也没有其他解释。

关于c# - 在 C# 中压缩现有的 TIFF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24455834/

24 4 0
文章推荐: c# - 使用linq按父级对对象列表进行分组以输出子元素
文章推荐: c# - 将 list 和 list 组合成单个平面列表