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

3

我有一个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();

我正在尝试使用以下代码从字节数组中获取图像:
```java byte[] imageData = ...; Image image = ImageIO.read(new ByteArrayInputStream(imageData)); ```
请注意,上述代码需要使用Java ImageIO库。
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文件显示为图像,但它并不是图像,而是CAD数据。 - Tormod
5个回答

1
很久以前,我在搜索C#中的DWG库时找到了这个:http://www.woutware.com/cadlib.html,但之后从未使用过。
你不能像处理普通图像文件一样处理DWG文件,DWG是一种相当复杂的格式,用于存储2D和3D数据。而且多年来也频繁更改,因此存在所有许可证混乱的问题。
希望这可以帮到你。

我认为这是付费库。你能否给我一些免费的示例代码,用于将文件转换为DWG或BitmapImage格式? - Upendra Chaudhari

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

我需要返回System.Windows.Media.Imaging.BitmapImage而不是System.Drawing.Bitmap。 - Upendra Chaudhari
@UpendraChaudhari 然后使用 TypeConverter 作为 BitmapImage 进行更新。 - Rosmarine Popcorn
它报错了:“对象引用未设置为对象的实例。” - Upendra Chaudhari

0

你已经自己回答了这个问题!

上面的代码对于像jpg、png、bmp、gif这样的其他图像文件可以正常工作,但对于dwg文件却无法正常工作。

为了使其正常工作,需要将字节数组反序列化为“dwg文件”本身,并使用一些API将其转换为位图,然后将其用作图像源。


请问您能否给我提供一个反序列化字节数组的示例代码,以将其转换回DWG文件?我该如何知道需要转换的字节数组是否包含DWG文件?它可能是PNG、JPG等其他格式。 - Upendra Chaudhari

0
尝试使用strm.Seek(0, SeekOrigin.Begin);,因为可能你已经通过读取流的方式超过了它的末尾。

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接