0

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

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

如何转换它,以便将其作为 System.Drawing.Image 使用?

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

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

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

谢谢你。

4

1 回答 1

1

使用SqlBytes。使用Image.FromStreamSqlBytes.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)构造函数路由调用会起作用,无论如何我都不是图形专家。

于 2009-10-06T03:59:20.967 回答