另一个“GDI+ 中发生一般错误” -问题

问题描述

好的,我用谷歌搜索了这个问题,并在 Stackoverflow 中搜索了这里,但我找不到解决方案,太多了,它是一个简单的解决方案。我从数据库加载图像并将它们保存为 JPG 本地目录中。大多数图像都能正常工作并正确保存,但有些图像会显示“GDI+ 中发生一般性错误”-错误

这是我的代码

        using (var encoderPara = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality,Qual))
        using (var paras = new EncoderParameters(1))
        using (var conn = new sqlConnection(conn_str))
        using (var cmd = new sqlCommand(cmd_str,conn))
        {
            paras.Param[0] = encoderPara;
            conn.open();
            using (var reader = cmd.ExecuteReader())
                while (reader.Read())
                    if (!reader.Isdbnull(reader.Getordinal("Image")))
                    {
                        var img = $"{reader["Order"]}_{reader["SubOrder"]}.jpg";
                        var P = Path.Combine(BasePath,img);

                        if (!File.Exists(P))
                            try
                            {
                                using (var MS = new MemoryStream((byte[])reader["Image"]))
                                using (var Img = Image.FromStream(MS))
                                using (var ImgJPG = new Bitmap(Img.Width,Img.Height))
                                using (var g = Graphics.FromImage(ImgJPG))
                                {
                                    g.Clear(Color.White);
                                    g.DrawImage(Img,new Point(0,0));
                                    ImgJPG.Save(P,JPG_Encoder,paras);
                                    WriteinLog($"Image created: {P}");
                                }
                            }
                            catch (Exception ex)
                            {
                                WriteinLog(string.Format("{1}{0}{0}{2}{0}{0}{3}{0}{0}{4}{0}{0}{5}{0}{0}{6}",Environment.NewLine,$"Error {img}",ex.GetType().FullName,ex.Message,ex.source,ex.StackTrace,ex.TargetSite));
                            }
                    }
        }

我认为错误在最内部的 using 块中,因为它似乎没有问题。所以我删除了使用并尝试按原样保存图像,但仍然出现 GDI+ 错误

它看起来像这样:

                                var MS = new MemoryStream((byte[])reader["Meta"]);
                                var Img = Image.FromStream(MS);
                                {
                                    Img.Save(P);
                                    WriteinLog($"Image created: {P}");
                                }

我的主要问题是,它适用于大多数图像,只有一些是例外,但如果它出现编解码器错误,它会更快地触发错误。不可能是 MS 或 Image 被处理,因为它们一起在 using 块中,我试图删除 using。不可能是文件存在并且正在使用中,因为我会检查。

解决方法

好的,我写了最后一句“不可能是文件存在并且正在使用中,因为我会检查它。”并意识到并非所有的 Subordernumbers 都是数据库中的数字,因此将文件名替换为递增的整数并且它起作用了。

所以当路径错误时,“GDI+ 中发生一般性错误”-错误。很高兴知道并留意。

我已经写了所有这些,所以我将其与答案一起发布,以感谢您对我的橡皮鸭的关注,并希望它可以帮助其他人。