4

我的程序有问题。我byte[]从 SQL Server 数据库中读取数据并将其保存为 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)
4

3 回答 3

2

还有一些人有同样的问题,所以我如何解决这个问题:

  • 螺杆系统.绘图

利用

  • File.WriteAllBytes(pathString, picBytes);
于 2014-07-31T07:41:24.793 回答
1

我有一个类似的问题,相同的代码适用于大多数图像,并产生了一些错误。作为一种解决方法,我发现从加载的图像创建位图并保存位图适用于所有图像。在您的情况下,这意味着:

using(var bmp=new Bitmap(returnImage))
  bmp.Save(@"path" + array[2] + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

我不知道为什么会这样,所以我会对任何进一步的信息非常感兴趣。

编辑:经过进一步调查,问题(至少在我的情况下)似乎与图像中的 EXIF 数据有关。如果 EXIF 块的长度大于 0xEFFF(即第一个字节为 0xFF),则无法保存图像。所以从文件开头剥离EXIF块也解决了问题

于 2013-03-27T13:55:10.877 回答
0

我在运行我安装的程序时出现了这个错误,但在 Visual Studio 调试器中运行它时没有。错误代码 0x80004005 表示权限错误。我怀疑在某些情况下,Windows 7 在读/写权限方面比 XP 更严格,而 Windows 10 肯定更具限制性。我能够通过以管理员身份运行程序来解决我的问题。但是,这对于我打算分发的程序来说是一个不好的做法,所以我检查了代码,发现我试图在程序文件夹中写入一个临时 emf 文件,该文件夹在 Windows 10 中受到保护。我可以通过写信来解决这个问题该程序的未受保护的 ProgramData 文件夹,或者最好使用 System.IO.Path.GetTempPath 获取临时文件的默认路径名。使用内存流是一个更好的解决方案。

于 2020-05-14T12:32:22.603 回答