如何从字节数组读取绘图图像(.dwg)

本文关键字:图像 绘图 dwg 读取 数组 字节 字节数 | 更新日期: 2023-09-27 18:13:05

我有一个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文件。谁能告诉我我的代码出了什么问题?

谢谢

如何从字节数组读取绘图图像(.dwg)

Times ago我在c#中搜索DWG库,发现了这个:http://www.woutware.com/cadlib.html,但之后从未使用过。

你不能威胁DWG文件像普通的图像文件,DWG是相当复杂的格式,用于存储2D和3D数据。几年前也是一个频繁变化和所有许可混乱的主题。

你自己回答了!

以上代码适用于其他图像文件,如jpg, png, bmp, gif。但不能用于DWG文件。

为了正确地工作,将字节数组反序列化回为"dwg文件"本身,并使用一些api将其转换为位图,并将其用作图像源。

尝试使用类型转换器

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);

尝试使用strm.Seek(0, SeekOrigin.Begin);,因为有可能您必须通过read

通过流。

一个选择是使用http://www.opendwg.org/虽然不是免费的,但它是非营利性的。

但是它只会为你解析dwg文件为线,圆,多边形等集合。你仍然需要拼凑和渲染图像。