【问题标题】:How to read drawing image (.dwg) from byte array如何从字节数组中读取绘图图像(.dwg)
【发布时间】:2011-12-18 15:54:02
【问题描述】:

我有一个 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 文件。谁能指导我的代码有什么问题?

谢谢

【问题讨论】:

  • 这个问题与您是否将其读取为字节数组或它是否已通过数据库无关。您正在尝试将 dwg 文件显示为图像。它不是图像。是 CAD 数据。

标签: c# wpf image


【解决方案1】:

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

但它只会为您将 dwg 文件解析为线、圆、多边形等的集合。 您仍然需要拼凑并渲染图像。

【讨论】:

    【解决方案2】:

    尝试使用strm.Seek(0, SeekOrigin.Begin);,因为您可能必须通过读取流过去

    【讨论】:

      【解决方案3】:

      尝试使用类型转换器

      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。
      • @UpendraChaudhari 比使用 TypeConverter 作为 BitmapImage 更新
      • 它给出错误:“对象引用未设置为对象的实例。”
      【解决方案4】:

      你自己回答了!

      以上代码适用于其他图像文件,如 jpg、png、bmp、gif。 但不适用于 dwg 文件。

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

      【讨论】:

      • 您能否给我示例代码以将字节数组反序列化回 dwg 文件?我怎么知道需要转换的字节数组包含 dwg 文件?它可能是 png、jpg...
      【解决方案5】:

      以前我在 C# 中搜索 DWG 库并找到了这个: http://www.woutware.com/cadlib.html,但没用过。

      您不能像普通图像文件那样威胁 DWG 文件,DWG 是一种相当复杂的格式,用于存储 2D 和 3D 数据。几年前也是频繁更改和所有许可混乱的主题。

      希望这会有所帮助。

      【讨论】:

      • 我认为它是付费图书馆。你能给我示例代码来转换成免费的 dwg 或 BitmapImage 吗?
      猜你喜欢
      • 1970-01-01
      • 2013-09-20
      • 2016-12-21
      • 2014-02-13
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      相关资源
      最近更新 更多