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