Чтение образа WMF с сервера SQL

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

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

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

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

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

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

Спасибо.

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) будет работать, я не эксперт по графике.

Другие вопросы по тегам