Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.222.109.4] |
|
Сообщ.
#1
,
|
|
|
Задача такова, нужно написать функцию которая бы преобразовала картинку из формата EMF хранящегося в базе, и вернула как значение его в формате BMP.
Первое с чем я столкнулся было отсутствие System.Drawing, что с помощью гугла я смог решить http://www.scalabium.com/faq/nct0011.htm Но вот при попытке прочесть данные System.Drawing.Imaging.Metafile заканчиваются ошибкой Цитата Msg 6522, Level 16, State 1, Line 1 A .NET Framework error occurred during execution of user-defined routine or aggregate "GetPositionImage": System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+. System.Runtime.InteropServices.ExternalException: at System.Drawing.Imaging.Metafile..ctor(Stream stream) at UserDefinedFunctions.GetPositionImage(SqlBytes image, SqlInt16 flag) тот же самый код в обычном проекте, созданным для отладки, отрабатывает корректно, когда помещаешь а SQL проект и деплоишь уже не выполняется. Причем если ту же самую процедуру выполнять с полем в котором хранится в BMP формате и грузить в Bitmap, то проблем тоже нет. Такое впечатление что есть некая особенность работы System.Drawing.Imaging.Metafile Код функции ниже, урезал до 2х строк, грохается на System.Drawing.Imaging.Metafile draw = new System.Drawing.Imaging.Metafile(stream) public partial class UserDefinedFunctions { [Microsoft.SqlServer.Server.SqlFunction] public static SqlBytes GetPositionImage(SqlBytes image, SqlInt16 flag) { MemoryStream stream = new MemoryStream(image.Value); System.Drawing.Imaging.Metafile draw = new System.Drawing.Imaging.Metafile(stream); /*switch (flag.Value) { case 1: draw.Save(output, System.Drawing.Imaging.ImageFormat.Bmp); break; case 2: draw.Save(output, System.Drawing.Imaging.ImageFormat.Gif); break; default: draw.Save(output, System.Drawing.Imaging.ImageFormat.Jpeg); break; }; output.Position = 0; byte[] resultBytes = new byte[output.Length]; output.Read(resultBytes, 0, (int)output.Length);*/ return null; } }; в чем может быть проблема? то что System.Drawing не случайно не включен в Sql assemblys я в курсе, читал из вышеуказанной ссыли. Но мне как то нужно решить эту задачу, с BMP то все прокатывает... |
Сообщ.
#2
,
|
|
|
сделай COM-объект из сборки и работай с ним в SQL
|