2015-10-06 50 views
0

我试图将.tif中的图像转换为.jpg,并且出现错误:将.tif转换为.jpg时,出现错误“GDI +中发生了一般错误”

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

回答

1

的误差几乎肯定发生,因为你试图将图像保存到一个不存在的目录。如果目录不存在,您需要创建目录 - 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)

+0

谢谢丹。我想我找到了问题。 String.Format生成“C:\\ 00346A23.jpg”...注意到两个反斜杠。我不知道为什么会发生这种情况。我想将它保存在C盘中。 –

+0

好吧,我通过去掉反斜杠来修复它。但我仍然遇到同样的错误。这是我现在拥有的:jpegPaths [frame] = String.Format(“{0} {1} .jpg”, destinationDirectory, Path.GetFileNameWithoutExtension(tiffFile), frame); –

+0

该输出目录是否存在?你只是想保存到不同的目录。顺便说一句,你确实需要两个反斜杠,因为它们会变成一个反斜杠......首先尝试用硬编码路径测试一个你__know__存在的目录,然后从那里建立。或者在尝试保存之前在每个路径上调用Directory.CreateDirectory。 –

相关问题