我的程序有问题。我从SQL Server数据库中读取byte[]
并将其保存为JPEG图像。
while (reader1.Read())
{
picBytes = null;
picBytes = (byte[])reader1.GetValue(0);
if (picBytes != null)
{
try
{
ms = new MemoryStream(picBytes, 0, picBytes.Length);
returnImage = Image.FromStream(ms, true);
returnImage.Save(@"path" + array[2] + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
returnImage.Dispose();
ms.Dispose();
}
catch (Exception e)
{
Console.WriteLine(e + array[2] + ".jpg");
}
}
}
我已经读过99%有权限错误,但是正确创建了500张图片而50张图片没有。
此错误仅在Windows 7 64Bit下引发...使用XP时没有问题:
Error in System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams)
答案 0 :(得分:2)
还有一些人有同样的问题,所以我在这里解决问题:
使用
答案 1 :(得分:1)
我有一个类似的问题,相同的代码适用于大多数图像,并为一些人产生了错误。作为一种解决方法,我发现从加载的图像创建一个位图并保存位图适用于所有图像。在你的情况下,这意味着:
using(var bmp=new Bitmap(returnImage))
bmp.Save(@"path" + array[2] + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
我不知道为什么会这样,所以我会对任何进一步的信息非常感兴趣。
编辑: 经过一些进一步的调查后,似乎问题(至少在我的情况下)与图像中的EXIF数据有关。如果EXIF块的长度大于0xEFFF(即第一个字节为0xFF),则无法保存图像。因此,从文件开头剥离EXIF块也可以解决问题
答案 2 :(得分:0)
运行安装的程序时出现此错误,但在Visual Studio调试器中运行该错误时却没有。错误代码0x80004005指示权限错误。我怀疑Windows 7在某些情况下比XP在读/写权限方面更特别,而Windows 10肯定更具限制性。我可以通过以管理员身份运行程序来解决我的问题。但是,对于我打算分发的程序而言,这是一种不好的做法,因此我检查了一下代码,发现我试图在程序文件夹中写入一个临时的emf文件,该文件在Windows 10中受到保护。我可以通过写入该程序的不受保护的ProgramData文件夹,或者最好使用System.IO.Path.GetTempPath来获取临时文件的默认路径名。使用内存流是一个更好的解决方案。