【问题标题】:How can I convert System.Byte[] to Image? (C# window forms)如何将 System.Byte[] 转换为 Image? (C# 窗口窗体)
【发布时间】:2015-07-11 03:57:51
【问题描述】:

我有一个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"];
            }

【问题讨论】:

    标签: c#


    【解决方案1】:

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

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

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

    【讨论】:

    • 但我不喜欢 PictureBox 选项??请帮忙
    • @Sanam:我不明白你的意思。在问题的上下文中,OP 有一个 pictureBox1 变量。我不知道您要做什么或您的上下文。我建议你问一个新问题。
    • 我们不应该用using 包围MemoryStream 或者至少在设置控制图像后处置实例吗?
    • @AlexJolig:你不能处理它 - Image.FromStream 承担流的所有权。处理图像将处理流,但对于 MemoryStream 无论如何都没关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多