使用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;
}
有人能帮我一下吗?谢谢你。
当你这样做的时候:
MemoryStream ms = new MemoryStream(buffer);
ms.Write(buffer, 0, buffer.Length);
你首先用缓冲区初始化内存流,然后立即用相同的数据覆盖它——将当前位置设置为流的末尾。当Bitmap
类试图从它读取时,它不会得到任何东西。
直接跳过Write
调用,内存流将提供字节数组中的数据。
另外-我建议在内存流和读取器周围有一个using
块。而且,如果你的Image<>
类没有保持对Bitmap
的引用,你应该立即处理它。