C# picturebox在将userdefined保存到字节数组时返回错误

C# picturebox在将userdefined保存到字节数组时返回错误,c#,C#,我真的需要帮助,因为我根本搞不懂这个。当它使用资源图像保存到字节数组中时效果很好,但是当有用户定义的图像时,它应该使用该图像并将其保存到数组和程序chrash中,我就是找不到问题 守则: //Check for image and if true save it to byte array if (pictureBox1.Image != null) { using (MemoryStream

我真的需要帮助,因为我根本搞不懂这个。当它使用资源图像保存到字节数组中时效果很好,但是当有用户定义的图像时,它应该使用该图像并将其保存到数组和程序chrash中,我就是找不到问题

守则:

        //Check for image and if true save it to byte array
        if (pictureBox1.Image != null)
        {               
            using (MemoryStream ms = new MemoryStream())
            {
                pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
                arr = ms.ToArray();
            }
        }
        else
        {
            using (MemoryStream ms = new MemoryStream())
            {
                AnimalMotel.Properties.Resources.nophotos.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
                arr = ms.ToArray();
            }
        }
这里的ELSE部分工作得很好,当有一个用户定义的映像时会出现问题,然后它崩溃并给出以下结果:

  An unhandled exception of type 
  'System.Runtime.InteropServices.ExternalException' 
  occurred in System.Drawing.dll

  Additional information: A generic error occurred in GDI+.
上一代码:

        OpenFileDialog openFileDialog1 = new OpenFileDialog();

        openFileDialog1.InitialDirectory = "c:\\";
        openFileDialog1.Filter = "(*.Bmp)|*.Bmp|All files (*.*)|*.*";
        openFileDialog1.FilterIndex = 2;
        openFileDialog1.RestoreDirectory = true;

        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            try
            {
                if ((myStream = openFileDialog1.OpenFile()) != null)
                {
                    using (myStream)
                    {
                        pictureBox1.Image = new Bitmap(myStream);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
            }
        }
    }

位图类对流有点挑剔。我五年前就开始使用位图了,我认为错误可能是您处理了从OpenFileDialog打开的原始流。在某些图像格式中,我认为流需要打开才能执行诸如保存之类的操作


试着让它保持打开状态(用(myStream)语句注释掉
),看看是否有帮助

我使用的是相同大小的图像和Bmp格式的图像,因此我相信这不应该是因为这样。请尝试将其另存为
System.Drawing.Imaging.ImageFormat.Png
,可能您的图像使用了
Bmp
格式不支持的某些属性,其中是将图像放入
pictureBox1.image
的代码?根据MSDN,当图像以错误格式保存时,会发生此异常。如果您真的需要执行
Stream.Dipsose()
并解除对磁盘文件的锁定,我认为您需要将图像保存到
MemoryStream
中,然后将其加载到
位图
中,并将其分配给pictureBox。如果你的原始文件是一个
Png
文件,我想你不会有这个问题。因为这是我对表单的一个大问题,我现在正在清理代码,现在我只是将字节数组放入一个列表中存储和访问,因为用户将能够查看列表。今天晚些时候我会做一些测试,看看是否是bmp给了我所有这些问题,如果是的话……sayonara bmp!!;)再次感谢您抽出时间!祝你有美好的一天!!是的,我又想起了。我记得我盯着“GDI+中发生了一个一般性错误”看了好几个小时。。。