繁体   English   中英

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

[英]How to read drawing image (.dwg) from byte array

我有一个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文件。 任何人都可以指导我的代码中有什么问题吗?

谢谢

很久以前我在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); 因为有可能你必须通过阅读过去

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM