C#从图片框保存图像(GDI +中发生一般错误)

时间:2017-12-07 21:53:59

标签: c# generics picturebox

首先,我要检索图像并用Access数据库填充图片框。

            con.Open();
        string sql = "select Foto from TSP_Data where KayitNo=" + sNo;
        OleDbCommand cmdResim = new OleDbCommand(sql, con);
        using (OleDbDataReader oku = cmdResim.ExecuteReader())
        {
            while (oku.Read())
            {
                byte[] veri = oku["Foto"] as byte[];
                using (MemoryStream mstream = new MemoryStream())
                {
                    mstream.Write(veri, 0, veri.Length);
                    Image fotop = Image.FromStream(mstream);
                    digerFormFoto.Image = fotop;
                }
            }
        }
  

将图像检索到图片框没有错误没有任何问题,它可以正常工作。

但是当我尝试用savefiledialog的picturebox保存方法保存图像时,它会给出如下错误: GDI +中发生了一般性错误

SaveFileDialog sfd = new SaveFileDialog();
        sfd.Filter = "Images|*.png;*.bmp;*.jpg";
        ImageFormat format = ImageFormat.Png;
        if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            string ext = System.IO.Path.GetExtension(sfd.FileName);
            switch (ext)
            {
                case ".jpg":
                    format = ImageFormat.Jpeg;
                    break;
                case ".bmp":
                    format = ImageFormat.Bmp;
                    break;
                case ".png":
                    format = ImageFormat.Png;
                    break;
            }
            digerFormFoto.Image.Save(sfd.FileName, format); //digerFormFoto is picturebox

1 个答案:

答案 0 :(得分:0)

如果图像已被GDI +使用或先前未处置过,则可能会发生这种情况,因为GDI +在使用时会锁定图像。我建议您使用内存流重新创建图像,或者从图片框中创建一个新的位图,然后将其保存如下:

Bitmap bitmapImage = new Bitmap(digerFormFoto.Image);
bitmapImage.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Bmp)