如何从字节数组读取绘图图像(.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文件。谁能告诉我我的代码出了什么问题?
谢谢
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文件为线,圆,多边形等集合。你仍然需要拼凑和渲染图像。