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