开发的过程中遇到了这个错误想要记录下来!
我是在保存图片文件时遇到的这个错误。
网上也搜了很多资料,试过之后还是会出错,代码其实也都大同小异没有太大区别,先把我遇到问题的经过描述一下:
我要做的是读取身份证信息,其中身份证的证件照也是需要存储下来的,身份证中的照片是二进制流读取的,需要在picturebox控件中展示,我的思路是:
1.读取二进制流,写到内存中
byte[] imgData = new byte[1111];
int length = 1111;
//读取流并填充imgData
MemoryStream myStream = new MemoryStream();
for (int i = 0; i < length; i++)
{
myStream.WriteByte(imgData[i]);
}
2.将二进制流转换为图片并绑定到控件中
Image myImage = Image.FromStream(myStream);
picCredentialsPhoto.Image = myImage;
3.生成jpg图片
_ImgStorePath = AppDomain.CurrentDomain.BaseDirectory + "img\\"+lblFileName.Text + ".jpg;
//照片另存
if (!File.Exists(_ImgStorePath))
{
File.Create(_ImgStorePath);
}
using (Bitmap bmp = new Bitmap(picCredentialsPhoto.Image.Width, picCredentialsPhoto.Image.Height))
{
Graphics g = Graphics.FromImage(bmp);//实例一个画板的对象,就用上面的图像的画板
g.DrawImage(picCredentialsPhoto.Image, 0, 0);//把目标图像画在这个图像文件的画板上
using (MemoryStream mem = new MemoryStream())
{
bmp.Save(_ImgStorePath, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
代码执行到bmp.Save(_ImgStorePath, System.Drawing.Imaging.ImageFormat.Jpeg); 时抛出异常“GDI+中发生一般性错误”。
解决办法:
经过调试及多次测试,发现问题在我创建文件那一步,我在创建文件时把图片文件也创建好了,之后再区保存图片的时候就出错了,正确代码如下:
//区别开始
_ImgStorePath = AppDomain.CurrentDomain.BaseDirectory + "img\\";
if (!Directory.Exists(_ImgStorePath))
{
Directory.CreateDirectory(_ImgStorePath);
}
_ImgStorePath += lblVisNumber.Text + ".jpg";
//区别结束
using (Bitmap bmp = new Bitmap(picCredentialsPhoto.Image.Width, picCredentialsPhoto.Image.Height))
{
Graphics g = Graphics.FromImage(bmp);//实例一个画板的对象,就用上面的图像的画板
g.DrawImage(picCredentialsPhoto.Image, 0, 0);//把目标图像画在这个图像文件的画板上
using (MemoryStream mem = new MemoryStream())
{
bmp.Save(_ImgStorePath, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
这样就不会报错了
别的同仁有可能是因为其他原因报错的,只是记录一下个人遇到的问题!有需要可借鉴