当将.tif转换为.jpg时,我得到了错误" GDI+中发生的一般错误"

本文关键字:错误 quot GDI+ jpg 转换 tif 当将 | 更新日期: 2023-09-27 18:16:41

我正在尝试将图像从。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);
                        }
                    }
                }
            } 

当将.tif转换为.jpg时,我得到了错误" GDI+中发生的一般错误"

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

最重要的是,jpegPaths[frame]的输出,如所写,将看起来像C:'temp'inputfile.jpg,而不是C:'temp'inputfile'1.jpg,这可能是您想要的。要解决这个问题,您需要执行以下操作:jpegPaths[frame] = String.Format("{0}''{1}''{2}.jpg",或者如果您不打算使用另一个子目录,也可以执行"{0}''{1}_{2}.jpg"。同样,请确保在尝试使用inputfile目录之前创建了它。

最后,没有必要将imageFile帧加载到自己的Bitmap中——一旦解决了其他问题,您可以直接调用imageFile.Save(jpegPaths[frame], ImageFormat.Jpeg)