Как прочитать рисунок (.dwg) из байтового массива - PullRequest
3 голосов
/ 31 октября 2011

У меня есть одно приложение WPF, в которое я загружаю файлы чертежей autocad (.dwg), преобразую его в байтовый массив и сохраняю в базу данных.Когда я читаю этот файл из байтового массива, я получаю следующую ошибку:

No imaging component suitable to complete this operation was found.

Мой код для преобразования в байтовый массив ниже:

FileStream fs = new FileStream(dlg.FileName, FileMode.Open, FileAccess.Read);
byte[] data = new byte[fs.Length];
fs.Read(data, 0, System.Convert.ToInt32(fs.Length));
fs.Close();

Я пытаюсь получить изображениеиз байтового массива, используя приведенный ниже код:

BitmapImage bi = new BitmapImage();
 bi.BeginInit();
 bi.CreateOptions = BitmapCreateOptions.None;
 bi.CacheOption = BitmapCacheOption.Default;
 bi.StreamSource = new MemoryStream(data);
 RenderOptions.SetBitmapScalingMode(bi, BitmapScalingMode.Linear);
 bi.EndInit();

Приведенный выше код отлично работает для других файлов изображений, таких как jpg, png, bmp, gif.но не работает для файла DWG.Кто-нибудь может подсказать мне, что не так в моем коде?

Спасибо

Ответы [ 5 ]

1 голос
/ 31 октября 2011

Несколько раз назад я искал библиотеку DWG в C # и нашел ее: http://www.woutware.com/cadlib.html,, но после того, как никогда ее не использовал.

Вы не можете угрожать файлам DWG, таким как обычные файлы изображений, DWG довольносложный формат для хранения 2D и 3D данных.И много лет назад также был предмет частых изменений и все беспорядки лицензирования.

Надеюсь, это поможет.

0 голосов
/ 01 ноября 2011

Один из вариантов - использовать http://www.opendwg.org/ Хотя это и не бесплатно, это некоммерческая организация.

Но он будет только анализировать файл DWG для вас в коллекцию линий, окружностей, многоугольников и т. Д. Вам все еще нужно соединить и визуализировать изображение.

0 голосов
/ 01 ноября 2011

Попробуйте использовать strm.Seek(0, SeekOrigin.Begin);, поскольку, возможно, вы прошли через поток с чтением

0 голосов
/ 31 октября 2011

Попробуйте использовать конвертер типов

FileStream fs = new FileStream(dlg.FileName, FileMode.Open, FileAccess.Read);
byte[] data = new byte[fs.Length];
fs.Read(data, 0, System.Convert.ToInt32(fs.Length));
fs.Close();
TypeConverter tc = TypeDescriptor.GetConverter(typeof(BitmapImage));
BitmapImage bitmap1 = (BitmapImage)tc.ConvertFrom(data);
0 голосов
/ 31 октября 2011

Вы сами ответили!

Приведенный выше код прекрасно работает для других файлов изображений, таких как jpg, png, bmp, gif. но не работает для файла DWG.

Для правильной работы десериализации массива байтов обратно в сам файл "dwg" и использование некоторых API для преобразования его в растровое изображение и использования его в качестве источника изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...