我正在尝试将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;
}
有人可以帮我解决这个问题。谢谢。
答案 0 :(得分:0)
当你这样做时:
MemoryStream ms = new MemoryStream(buffer);
ms.Write(buffer, 0, buffer.Length);
您首先使用缓冲区初始化内存流,然后使用相同的数据覆盖它 - 将当前位置设置为流的末尾。当Bitmap
班试图从中读取时 - 它不会得到任何东西。
只需跳过Write
调用,内存流将提供字节数组中的数据。
另外 - 我建议在内存流和阅读器周围设置一个using
块。而且,如果您Image<>
类的Bitmap
类没有引用objectForKey(_:)
,则应立即处理它。