从db读取WMF文件,转换为位图图像

时间:2009-10-10 05:41:59

标签: c# image sql-server-2008 ms-access-2007

我已经意识到我的第一个问题将无法回答,因为php无法处理这种格式:https://stackoverflow.com/questions/1376103/how-to-convert-metafilepict-to-bitmapped-image-in-php,所以我有一个C#控制台应用程序只会加载图像, MS SQL 2008 db或Access 2007,然后将它们保存到目录。

最初,图像被保存为Windows Media File(WMF)到访问数据库。

所以,我有以下代码,最后一行有错误:

byte[] mybytes = (byte[])sdr["LocationMap"];
System.IO.MemoryStream ms =
       new System.IO.MemoryStream(mybytes);
System.Drawing.Bitmap b =
  (System.Drawing.Bitmap)System.Drawing.Image.FromStream(ms);                        

sql server中的“LocationMap”列是varbinary,在Access中是image。

如何从两个数据库中的一个加载,所以我可以将其保存为位图图像?

这是我的错误:

A first chance exception of type 'System.ArgumentException' occurred in System.Drawing.dll
System.Transactions Critical: 0 : <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Critical"><TraceIdentifier>http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled</TraceIdentifier><Description>Unhandled exception</Description><AppDomain>ConvertWMFToFile.vshost.exe</AppDomain><Exception><ExceptionType>System.ArgumentException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType><Message>Parameter is not valid.</Message><StackTrace>   at System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData)
   at System.Drawing.Image.FromStream(Stream stream)

更新:这是我的另一次尝试失败:

//imageBytes = sdr.GetSqlBytes(2);
//var stream = imageBytes.Stream;
//stream.Seek(0, SeekOrigin.Begin);
//locmod.LocationImage = new Metafile(stream);

Update2:我刚尝试了这个并得到了一个通用的GDI +错误:

byte[] mybytes = (byte[])sdr["LocationMap"];
var f = File.Create("tempfile.wmf");
f.Write(mybytes, 0, locmod.LocationImageBytes.Length);
f.Close();
var myimage = new Metafile("tempfile.wmf");

错误:

System.Runtime.InteropServices.ExternalException was unhandled
  Message="A generic error occurred in GDI+."
  Source="System.Drawing"
  ErrorCode=-2147467259
  StackTrace:
       at System.Drawing.Imaging.Metafile..ctor(String filename)

2 个答案:

答案 0 :(得分:1)

您是否尝试过Metafile课程来加载它?

http://msdn.microsoft.com/en-us/library/wb42xhfh.aspx

答案 1 :(得分:1)

您可能会发现Stephen Lebans的示例数据库中的代码如下:

这不是WMF特有的 - 它适用于任何OLE字段。我在4个月前用它从客户端数据库中提取了一堆Word文档,并且工作正常(尽管用旧版本的Word填充了一些字段无法提取)。