从.NET中的MS Access数据库读取OLE映像时出现ArgumentException

我试图从Access数据库中读取图像。 它读取字节但是当我尝试使用Image.FromStream时它会给出一个未处理的System.ArgumentException。

这是我的代码:

  private Image ReadImageFromDB() { Image fetchedImg; if (rownumber >= 0) { byte[] fetchedimgbytes = (byte[])localDataTable.Rows[5]["Object"]; MemoryStream stream = new MemoryStream(fetchedimgbytes); fetchedImg= Image.FromStream(stream); return fetchedImg; } else { MessageBox.Show("no image"); return null; } } 

我下载了您的示例文件,当我在Access中打开表时,[Img]列中的项目表示“位图图像”,而不是“长二进制数据”。

BitmapImage.png

因此,该行中的[Img]项是“OLE包装”对象,而不是原始位图图像。 如果您提取该列的二进制内容(就像您在C#应用程序中所做的那样),它将在原始二进制图像数据周围包含OLE包装器,并且不会是该表单中的有效位图图像。

您需要从二进制数据中删除OLE标头信息,然后才能将其识别为有效图像。 有关如何执行此操作的信息,请参阅此问题:

在C#中将Access图像OLE对象转换为原始图像字节数组