如何将System.Byte[]转换为映像?(C#窗口窗体)
我有一个如何将System.Byte[]转换为映像?(C#窗口窗体),c#,C#,我有一个PictureBox控件,我想在其中显示图像。我使用以下数据类型将图像保存在MS Access数据库中:OLE对象。 我发现很难再把它展示出来。请看一下我的代码,你们能想出一个解决方案吗。我得到了这个异常: Unable to cast object of type 'System.Byte[]' to type 'System.Drawing.Image'. 这是我的密码: OleDbCommand cmd = new OleDbCommand("SELECT IMAGE FROM
PictureBox
控件,我想在其中显示图像。我使用以下数据类型将图像保存在MS Access数据库中:OLE对象
。
我发现很难再把它展示出来。请看一下我的代码,你们能想出一个解决方案吗。我得到了这个异常
:
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"];
}
最简单的方法是使用
MemoryStream
并调用Image.FromStream
:
byte[] data = (byte[]) dt.Rows[0]["IMAGE"];
MemoryStream ms = new MemoryStream(data);
pictureBox1.Image = Image.FromStream(ms);
编辑:如果遇到Hans描述的问题,基本上需要去掉标题。一旦你得到一个只有图像数据的字节数组,使用上面的代码。但是我不喜欢PictureBox选项??请help@Sanam例如我不知道你的意思。在问题的上下文中,OP有一个pictureBox1变量。我不知道你想做什么,也不知道你的背景。我建议你问一个新问题。我们是不是应该通过
使用来包围MemoryStream
,或者至少在设置控件映像后处理实例?@AlexJolig:你不能处理它-映像。FromStream
拥有流的所有权。处理图像将处理流,但对于MemoryStream
来说,这并不重要。