2016-09-23 10 views
1

毫無疑問,這是不可能的,但我想看看是否有人有一個巧妙的建議。我們可以輸出的圖像內部存儲定製的數據庫內的第三方組件文件中使用的內部方法「的SaveToFile」,一個例子:截取文件流...不可能嗎?

3rdParty.Scripting.ImageManager man = new 3rdParty.Scripting.ImageManager("ref"); 

3rdParty.Scripting.Image itemImg = man.GetImage(orderNumber); 

itemImg.SaveToFile("c:\file.jpg") 

ItemImg.SaveToFile沒有返回類型,只是在內部創建一個位圖並將其寫入文件流。我們完全不能訪問編譯的方法。

我需要做的是以某種方式攔截文件流並閱讀位圖,我知道這可能是不可能的,但我不是絕對的專家,所以想看看是否有一種神奇的方式來做到這一點。

如果一切都失敗了,我會保存文件,然後讀回來,我只是想避免保存到磁盤,我可能直接獲取數據,並最終將其轉換爲base64字符串值。

+0

使用MemoryStream。 – jdweng

+1

'3rdParty.Scripting.Image itemImg = man.GetImage(orderNumber);' - 這是在內存中的圖像,不是嗎?當然,如果你有權訪問所有的像素數據,那麼你不能只從'itemImg'構造「base64字符串值」嗎? – Quantic

+0

林與@Quantic對此。做一些調試,看看這個'Image'類型的私有成員是什麼。如果在託管內存中加載了某些內容,則可以使用反射從該類型的私有成員獲取該流。代碼雖然會非常脆弱,應該重新測試該庫所做的任何版本更改。 – Igor

回答

8

不幸的是,除非第三方庫提供了一個SaveToStream方法,您可以從外部提供流,否則無法實現您的目標。您將不得不將內容保存到臨時文件,然後再讀取內容。

這就是爲什麼當設計一個庫來提供Streams作爲I/O參數的方法時,這通常是最好的實踐,因爲這會讓消費者控制是否要將它保存到文件,內存或網絡流。

+0

感謝Darin,我的想法正是......這是一個可怕的圖書館,但我們別無選擇,只能使用它。 –

相關問題