首先,我要检索图像并用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
答案 0 :(得分:0)
如果图像已被GDI +使用或先前未处置过,则可能会发生这种情况,因为GDI +在使用时会锁定图像。我建议您使用内存流重新创建图像,或者从图片框中创建一个新的位图,然后将其保存如下:
Bitmap bitmapImage = new Bitmap(digerFormFoto.Image);
bitmapImage.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Bmp)