如何将mysql中的图像blob检索到c应用程序中?

pokxtpni  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(292)

我在我的mysql数据库longblob类型中存储了一组png图像。我正在用c#检索它们。这是我第一次尝试检索longblob类型,到目前为止,我读到的所有内容似乎都没有帮助。stackoverflow上的版本相关,但使用不同的语言或不同类型的sql,因此我还没有找到这个特定语言和sql版本的确切答案,以及如何将其转换为system.drawing.image。
这是我的结构:

public struct HeadshotOBJ
{
    public int ID;
    public System.Drawing.Image Headshot;  
    public int HairColorID;
    public int HairLengthID;
    public int HairTypeID;
    public int EyeColorID;
    public int GenderID;
    public int SkinToneID;
    public int BodyTypeID;
}

接下来,我要检索以下字段:

query.Append("SELECT * FROM headshots;");

            cmd = new MySqlCommand(query.ToString(), conn);

            // Execute query
            dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                HeadshotOBJ headshot;

                headshot.ID = Convert.ToInt32(dr["id"]);
                headshot.Headshot = dr["headshot"];   // Need to convert somehow to System.Drawing.Image here.
                headshot.HairColorID = Convert.ToInt32(dr["hair_color_id"]);
                headshot.HairLengthID = Convert.ToInt32(dr["hair_length_id"]);
                headshot.HairTypeID = Convert.ToInt32(dr["hair_type_id"]);
                headshot.EyeColorID = Convert.ToInt32(dr["eye_color_id"]);
                headshot.GenderID = Convert.ToInt32(dr["gender_id"]);
                headshot.SkinToneID = Convert.ToInt32(dr["skin_tone_id"]);
                headshot.BodyTypeID = Convert.ToInt32(dr["body_type_id"]);

                lstHeadShots.Add(headshot);
            }

我肯定我需要读入字节,但我不知道如何这样做,以及如何在代码中看到它。我对sql并不陌生,我的工作过去也使用过blob,但我以前从未尝试过自己检索blob,尤其是在将数据存储到system.drawing.image对象中时。

pbossiut

pbossiut1#

不确定这是否真的算作“重复”问题,因为这是我发现的几个问题的组合,但是。。。
根据这一点,你可以把这个斑点看作 byte[] 数组:

byte[] imageBytes = (byte[])dr["headshot"];

从那里,你可以把它转换成 Image :

using (var ms = new MemoryStream(imageBytes))
{
    headshot.Headshot = System.Drawing.Image.FromStream(ms);
}

相关问题