2011-10-31 78 views
3

我有一個WPF應用程序,我在其中上傳autocad繪圖文件(.dwg),將其轉換爲字節數組並保存到數據庫。當我讀回的字節數組文件,我收到以下錯誤:如何從字節數組中讀取繪圖圖像(.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

這個問題與它有關很少,或者你沒有把它作爲字節數組讀取,或者它沒有通過數據庫。您正試圖將dwg文件顯示爲圖像。這不是一個圖像。這是CAD數據。 – Tormod

回答

1

時報前,我在C#尋找DWG圖書館,發現這一個: http://www.woutware.com/cadlib.html,但畢竟從來沒有使用過。

您不能威脅像普通圖像文件一樣的DWG文件,DWG也是用於存儲2D和3D數據的相當複雜的格式。多年前還經常發生變化,許可證混亂。

希望這會有所幫助。

+0

我認爲這是支付庫。你可以請給我示例代碼轉換爲免費的DWG或BitmapImage? –

0

你自己回答了!

上面的代碼適用於其他圖像文件,如jpg,png,bmp,gif。 但不適用於dwg文件。

爲了正確工作,將字節數組反解爲「dwg文件」本身,並使用一些API將其轉換爲位圖並將其用作圖像源。

+0

你能給我示例代碼反序列化字節數組回到DWG文件?我怎麼能知道需要轉換的字節數組包含dwg文件?它可能是PNG,JPG ... –

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

我需要System.Windows.Media.Imaging.BitmapImage返回不是System.Drawing.Bitmap。 –

+0

@UpendraChaudhari比使用TypeConverter作爲BitmapImage更新 – Burimi

+0

它給出錯誤:「對象引用未設置爲對象的實例。」 –

0

嘗試使用strm.Seek(0, SeekOrigin.Begin);,因爲有可能你必須通過與閱讀

+0

我試過使用這個選項,但沒有得到任何解決方案。 –

0

一種選擇是使用http://www.opendwg.org/ 雖然不是免費的流走過去,是非營利性的。

但它只會將dwg文件解析爲線條,圓形,多邊形等的集合。 您仍然需要拼合並渲染圖像。