从SQL Server读取WMF图像

时间:2009-10-06 03:50:57

标签: c# sql-server-2008 .net-3.5 image-conversion

我正在使用SqlDataReader,我正在尝试从我从Access文件转换的表中读取,并且在SQL Server 2008中。

数据类型现在是varbinary(max)。

我如何转换它,所以我可以将它作为System.Drawing.Image?

这是一个Windows MetaFile,我想将其转换为PNG或GIF并将其保存到文件系统。

看起来这不正确,因为我收到一个无法转换为Image的错误。

System.Drawing.Image LocationImage = sdr.GetSqlBinary(2)

谢谢。

1 个答案:

答案 0 :(得分:1)

使用SqlBytes。使用Image.FromStream加载SqlBytes.Stream中的图片。使用阅读器上的CommandBehavior.SequentialAccess加载大尺寸图片:

using (SqlDataReader sdr=cmd.ExecuteReader(CommandBehavior.SequentialAccess))
{
...
System.Data.SqlTypes.SqlBytes imageBytes = srd.GetSqBytes(2);
System.Drawing.Image locationImage = Image.FromStream(imageBytes.Stream);
}

将其保存为PNG / GIF:

SqlCommand cmd = new SqlCommand("update table set image=@image where ...")

MemoryStream streamOutput = new MemoryStream();
image.Save(streamOutput, ImageFormat.Png);
SqlBytes imageBytes = new SqlBytes(streamOutput); 
cmd.Parameters.AddWithValue("@image", imageBytes);
cmd.ExecuteNonQuery()

<强>更新

我不确定Image.FromStream是否可以加载WMF格式。它可以加载EMF afaik,但我不确定WMF。也许通过Metafile(Stream)构造函数路由调用是可行的,我不是一个图形专家。