我有一个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文件。任何人都可以指导我的代码中有什么问题吗?
由于
答案 0 :(得分:1)
很久以前我在C#中搜索DWG库并找到了这个: http://www.woutware.com/cadlib.html,但从未使用过它。
您不能像普通图像文件那样威胁DWG文件,DWG也是用于存储2D和3D数据的相当复杂的格式。多年前,这也是一个经常变化和所有许可混乱的主题。
希望这有帮助。
答案 1 :(得分:0)
你自己已经回答了!
以上代码适用于其他图像文件,如jpg,png,bmp,gif。 但不适用于dwg文件。
为了正常工作,将字节数组反序列化为“dwg文件”本身,并使用一些API将其转换为位图并将其用作图像源。
答案 2 :(得分:0)
尝试使用类型转换器
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);
答案 3 :(得分:0)
尝试使用strm.Seek(0, SeekOrigin.Begin);
,因为您可能已经通过阅读
答案 4 :(得分:0)
一种选择是使用http://www.opendwg.org/ 虽然不是免费的,但它是非营利性的。
但它只会将你的dwg文件解析为线条,圆圈,多边形等的集合。 你仍然需要拼凑起来渲染图像。