如何将System.Byte[]转换为图像?(C#窗体应用程序)

8

我有一个 PictureBox 控件,我想在其中显示一张图片。我将我的图片保存在 MS Access 数据库中,数据类型为 OLE Object。但是我发现很难再次显示它。请看看我的代码,你们能否为此提供解决方案。我得到了这个 Exception

Unable to cast object of type 'System.Byte[]' to type 'System.Drawing.Image'.

这是我的代码:
OleDbCommand cmd = new OleDbCommand("SELECT IMAGE FROM IMAGES WHERE ID = 1", myConn));
            cmd.CommandType = CommandType.Text;
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);
            DataTable dt = new DataTable("dt");
            da.Fill(dt);

            if (dt != null)
            {              
                pictureBox1.Image = (Image)dt.Rows[0]["IMAGE"];
            }
1个回答

28

最简单的方法是使用MemoryStream并调用Image.FromStream

byte[] data = (byte[]) dt.Rows[0]["IMAGE"];
MemoryStream ms = new MemoryStream(data);
pictureBox1.Image = Image.FromStream(ms);

编辑:如果你遇到了Hans所描述的问题,你基本上需要去除该头部。一旦你获得了一个只包含图像数据的字节数组,请使用上面的代码。


但是我找不到 PictureBox 选项?请帮忙。 - SanamShaikh
@Sanam:我不知道你的意思。在问题的上下文中,OP有一个pictureBox1变量。我不知道你想做什么或者你的上下文是什么。我建议你提出一个新的问题。 - Jon Skeet
我们不应该将 MemoryStreamusing 包围起来,或者在设置控件图像后至少释放实例吗? - Ghasem
1
@AlexJolig:你不应该处理它 - Image.FromStream 假设拥有流的所有权。 虽然处理图像将处理流,但对于 MemoryStream 无论如何都没有关系。 - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接