使用C#将MediumBlob数据转换为位图图像

时间:2015-08-13 10:22:35

标签: c# mysql bitmap emgucv

我正在尝试将MySQL中的midblob数据转换为Bitmap图像,但我不能这样做。我收到的错误是

  

参数无效。

这是我的c#代码:

 MySqlCommand select = new MySqlCommand("Select FaceName, FaceImage From TrainingSet1", conn);
                MySqlDataReader reader = select.ExecuteReader();



                while (reader.Read())
                {
                    labels.Add(reader["FaceName"].ToString());


                    byte[] buffer = (byte[])reader["FaceImage"];
                    MessageBox.Show("kw");

                    MemoryStream ms = new MemoryStream(buffer);

                    ms.Write(buffer, 0, buffer.Length);
                    Bitmap bmp = new Bitmap(ms); //prb is here
                    MessageBox.Show("remy");
                    Image<Gray, byte> image = new Image<Gray, byte>(bmp);
                    trainingImages.Add(image);
                }

                reader.Close();

这是我的图像在数据库中添加功能:

 private byte[] ConvertToDBFormat(IImage InputImage)
    {
        Bitmap BmpImage = new Bitmap(InputImage.Bitmap);
        MemoryStream MyStream = new MemoryStream();
        BmpImage.Save(MyStream, System.Drawing.Imaging.ImageFormat.Jpeg);
        byte[] ImageAsBytes = MyStream.ToArray();
        return ImageAsBytes;
    }

有人可以帮我解决这个问题。谢谢。

1 个答案:

答案 0 :(得分:0)

当你这样做时:

 MemoryStream ms = new MemoryStream(buffer);
 ms.Write(buffer, 0, buffer.Length);

您首先使用缓冲区初始化内存流,然后使用相同的数据覆盖它 - 将当前位置设置为流的末尾。当Bitmap班试图从中读取时 - 它不会得到任何东西。

只需跳过Write调用,内存流将提供字节数组中的数据。

另外 - 我建议在内存流和阅读器周围设置一个using块。而且,如果您Image<>类的Bitmap类没有引用objectForKey(_:),则应立即处理它。