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

本文关键字:位图 图像 转换 数据 MediumBlob 使用 | 更新日期: 2023-09-27 18:07:49

我正试图将我的mediumblob数据转换为MySQL中的位图图像,但我不能这样做。我得到的错误是

参数无效。

这是我的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;
    }
有人能帮我一下吗?谢谢你。

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

当你这样做的时候:

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

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

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

另外-我建议在内存流和读取器周围有一个using块。而且,如果你的Image<>类没有保持对Bitmap的引用,你应该立即处理它。