1

我想从 ms 访问数据库中检索图像,以便使用此代码在 PictureBox 中显示,我的代码如下所示:

private void button1_Click(object sender, EventArgs e)
    {
        OleDbConnection myConnection = new OleDbConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

        myConnection.Open();
        OleDbCommand cmd = new OleDbCommand("select * from [Images] where ID=1", myConnection);
        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);

        if (dt.Rows.Count > 0)
        {
            if (dt.Rows[0]["AImage"] != DBNull.Value)
            {
                pictureBox.Image = ByteArrayToImage((Byte[])dt.Rows[0]["AImage"]);
            }
        }
        myConnection.Close();   

    }

    Bitmap ByteArrayToImage(byte[] b)
    {
        MemoryStream ms = new MemoryStream();
        byte[] pData = b;
        ms.Write(pData, 0, Convert.ToInt32(pData.Length));
        Bitmap bm = new Bitmap(ms, false);
        ms.Dispose();
        return bm;
    }

但有一个错误,如:“参数无效。” 因为Bitmap bm = new Bitmap(ms, false); 我不知道为什么?

4

1 回答 1

0

来自Bitmap构造函数的 MSDN 文档:Bitmap(stream, Boolean)

如果出现以下情况,则会引发 System.ArgumentException :

不包含图像数据或者是Nothing

-或者-

包含单个尺寸大于 65,535 像素的 PNG 图像文件。

评论

您必须在位图的生命周期内保持流打开。

由于 GDI+ 解码器的限制, 如果从单个维度大于 65,535 像素的 .png 图像文件构造位图,则会引发System.ArgumentException 。

您是否检查了从 Access 数据库中检索的图像的属性,以查看这是否描述了您的错误情况?

于 2013-05-04T14:16:54.290 回答