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

时间:2011-10-31 11:01:31

标签: c# wpf image

我有一个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 个答案:

答案 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文件解析为线条,圆圈,多边形等的集合。 你仍然需要拼凑起来渲染图像。