Чтение образа WMF с сервера SQL - PullRequest
0 голосов
/ 06 октября 2009

Я использую SqlDataReader и пытаюсь прочитать из таблицы, которую я преобразовал из файла Access, и в SQL Server 2008.

Тип данных теперь является varbinary (max).

Как мне преобразовать это, чтобы я мог получить его как System.Drawing.Image?

Это метафайл Windows, и я хочу преобразовать его в PNG или GIF и сохранить в файловой системе.

Похоже, что это не будет правильно, так как я получаю сообщение об ошибке, которое не может быть преобразовано в изображение.

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

Спасибо.

1 Ответ

1 голос
/ 06 октября 2009

Использовать 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) , я не эксперт по графике.

...