在这段代码中,我想使用linqtosql将图像保存在数据库中的picturebox1中.....但在将图像转换为字节数组时会出现一些异常
异常是“System.NullReferenceException:对象引用未设置为对象的实例。”
private void button1_Click(object sender, EventArgs e)
{
DataClasses1DataContext dc = new DataClasses1DataContext();
try
{
string signname = textBox1.Text;
string imageurl = textBox2.Text;
pictureBox1.ImageLocation = imageurl;
// byte[] file_byte = new byte[1000];
// Image newimage = new Image(pictureBox1.Image);
///Error comes here
byte[] file_byte = ImageToByteArray(pictureBox1.Image);
System.Data.Linq.Binary file_binary = new System.Data.Linq.Binary(file_byte);
Sign_Table obj = new Sign_Table()
{
Sign_Name = signname,
Sign_Image = file_binary,
};
dc.Sign_Tables.InsertOnSubmit(obj);
}
finally
{
dc.SubmitChanges();
}
}
private byte[] ImageToByteArray(Image imageIn )
{
using (MemoryStream ms = new MemoryStream())
{
// Error comes here
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
return ms.ToArray();
}
}
答案 0 :(得分:1)
我怀疑问题是当你引用它时,pictureBox.Image为null。您正在设置pictureBox.ImageLocation但不实际加载图像。 设置pictureBox.ImageLocation后立即添加对pictureBox.Load()的调用。
答案 1 :(得分:0)
创建Memorystream时,必须与bytes []关联,例如
byte [] buf = new byte [4096];
然后你可以 使用(MemoryStream ms = new MemoryStream(buf))
因此,以字节为单位计算图像大小的上限,然后将MemoryStream与包含该字节数的数组相关联。