0

このコードでは、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();
    }

}
4

2 に答える 2

1

問題は、参照するとpictureBox.Imageがnullになることだと思います。あなたはpictureBox.ImageLocationを設定していますが、実際には画像をロードしていません。pictureBox.ImageLocationを設定した直後に、pictureBox.Load()への呼び出しを追加します。

于 2013-02-19T17:30:51.913 に答える
0

たとえば、Memorystream を作成するときは、bytes[] に関連付ける必要があります。

バイト[] buf = 新しいバイト[4096];

次に、 (MemoryStream ms = new MemoryStream(buf)) を使用できますか

そのため、画像サイズの上限をバイト単位で計算し、そのバイト数を含む配列に MemoryStream を関連付けます。

于 2013-02-19T17:17:52.023 に答える