将 .tif 转换为 .jpg 时,出现错误 "a generic error occurred in GDI+"

When converting a .tif to a .jpg, I get the error "a generic error occurred in GDI+"

我正在尝试将图像从 .tif 转换为 .jpg,但 运行 出现错误:

GDI+ 中出现一般性错误。

我不知道问题出在哪里,而且我很难在网上找到解决方案。有人可以帮忙吗?

错误发生在bmp.Save(jpegPaths[frame], ImageFormat.Jpeg);

public static void ConvertTiffToJpeg(string tiffFile, string destinationDirectory)
            {
                using (Image imageFile = Image.FromFile(tiffFile))
                {
                    FrameDimension frameDimensions = new FrameDimension(
                        imageFile.FrameDimensionsList[0]);

                    // Gets the number of pages from the tiff image (if multipage) 
                    int frameNum = imageFile.GetFrameCount(frameDimensions);
                    string[] jpegPaths = new string[frameNum];

                    for (int frame = 0; frame < frameNum; frame++)
                    {
                        // Selects one frame at a time and save as jpeg. 
                        imageFile.SelectActiveFrame(frameDimensions, frame);
                        using (Bitmap bmp = new Bitmap(imageFile))
                        {
                            jpegPaths[frame] = String.Format("{0}\{1}.jpg",
                                //Path.GetDirectoryName(tiffFile),
                                destinationDirectory,
                                Path.GetFileNameWithoutExtension(tiffFile),
                                frame);

                            bmp.Save(jpegPaths[frame], ImageFormat.Jpeg);
                        }
                    }
                }
            } 

错误几乎肯定会发生,因为您正试图将图像保存到不存在的目录中。如果目录不存在,您需要创建目录 - Bitmap.Save 不会自动创建。您可能应该首先检查 Directory.Exists 以确保您不会无意中覆盖文件(提示用户覆盖或输入新名称?)。

最重要的是,jpegPaths[frame] 的输出看起来像 C:\temp\inputfile.jpg,而不是 C:\temp\inputfile.jpg,这可能正是您想要的。要解决这个问题,您需要这样做:jpegPaths[frame] = String.Format("{0}\{1}\{2}.jpg",或者如果您不想使用另一个子目录,则可能是 "{0}\{1}_{2}.jpg"。同样,确保在尝试使用之前创建 inputfile 目录。

最后,没有必要将 imageFile 框架加载到它自己的 Bitmap 中 - 您可以在解决其他问题后调用 imageFile.Save(jpegPaths[frame], ImageFormat.Jpeg)