2013-04-18 23 views
0

經歷了許多類似的問題之後,我沒辦法,只能在這裏提出自己的問題。如何從位圖數據創建BufferedImage

我需要在swing應用程序上顯示圖像。圖像的來源是從MS SQL服務器檢索到的位圖數據。我嘗試了以下方法

TRY 1 - 我試圖從檢索的字節中創建ImageIcon。沒有結果。

TRY 2 - 將字節保存在.png文件中並嘗試加載使用ImageIO。這在我的本地機器上正常工作,但在測試服務器上失敗。這兩個都是Windows機器。

TRY3 - 在步驟2中,我嘗試使用不同於.png的格式進行保存。它根本不起作用。

請讓我知道我錯過了什麼?

注意:我已嘗試將jai jar包括到參考庫中。

+0

我在Durandal的幫助下解決了這個問題。我不得不直接使用JAI創建映像,因爲我沒有權限在目標系統上安裝JAI。 'PlanarImage planar = JAI.create(「stream」,SeekableStream.wrapInputStream(inputStream,true));'是要走的路。然後使用'planar.getAsBuffredImage()'進行顯示。 –

回答

0

您應該已經存儲了提示數據在數據庫中的格式。如果沒有,你只能希望ImageIO 可以用來處理它。

沒有必要將數據寫入文件(這本身就是一個陷阱,你會寫它們嗎?考慮受限的進程權限和磁盤配額)。只需創建一個可直接訪問數據的InputStream(例如java.io.ByteArrayInputStream),這樣您就可以使用基於流的方法直接加載ImageIO。

+0

感謝您的回覆。圖像在數據庫中保存爲_image_類型。如果你看數據,它是一個很大的十六進制整數。我正在以字節讀取數據。有沒有其他方法我應該嘗試? 我嘗試了你提到的方式。仍然沒有結果。從數據庫讀取數據時可能是我錯了(!?) –

+0

MS-SQLServer中的類型列「IMAGE」與圖形圖像無關。 Image是二進制文件的blob類型,它可以包含任何種類的二進制數據。如果ImageIO無法處理所有圖像,只能手動查看那些失敗的圖像,並檢查出四個字節 - 通常包含一些幻數,以便您猜測文件的格式(http:// www。 astro.keele.ac.uk/oldusers/rno/Computing/File_magic.html有一個常用幻數的簡短列表)。我懷疑你的一些文件根本不是圖像,或者它是ImageIO不支持的罕見格式。 – Durandal

+0

我檢查了您提供的鏈接,它是小端英特爾TIFF格式。是的,這個圖像列將始終有圖像數據。所有圖像數據以'49492a00'開頭。我發現ImageIP API默認不支持tiff格式。作爲大多數情況下的附加信息,我也以文件形式存在圖像數據,但即使將JAI添加到我的庫中後,我也無法讀取這些圖像。 –