2011-10-31 36 views
2

我試圖將長度爲128的字節數組轉換爲存儲在BufferedImage中的32x32位圖。 我使用下面的代碼:將字節數組轉換爲bufferedimage導致null

private BufferedImage fSP; 

public Pattern(byte[] aBitData) { 
    if (aBitData == null) { 
    throw new IllegalArgumentException("Please provide a non-null byte array of length 128: " + aBitData); 
    } 
    else if (aBitData.length != 128) { 
    throw new IllegalArgumentException("Please provide a non-null byte array of length 128: " + aBitData.length); 
    } 
    InputStream in = new ByteArrayInputStream(aBitData); 
    try { 
    fSP = ImageIO.read(in); 
    } catch(IOException e) { 
    e.printStackTrace(); 
    } 
} 

但每一個FSP被設置爲null,出於某種原因的時間。我不明白爲什麼會發生這種情況。任何人都可以幫我嗎?

+0

[閱讀](http://download.oracle.com/javase/1,5.0/docs/api/javax/imageio/ImageIO.html#read(java.io.InputStream))的文檔 –

回答

0

我懷疑您的位陣列中提供的數據與任何支持的文件格式都不一致,即可以通過任何實施的ImageReader來讀取。

+0

這確實是可能是這種情況,我該如何解決這個問題呢?數據以長度爲128的字節數組形式提供,其中每個位代表一個像素(黑/白)。我是否必須製作自己的ImageReader,或者可能有其他方法將這種字節數組轉換爲BufferedImage? – ChrisV

+0

@ChrisV你可以直接實例化'TYPE_BYTE_BINARY'類型的'BufferedImage'並直接設置位數據。 – Howard

+0

好吧,我想我會試試,謝謝你的快速回復。 – ChrisV

1

JavaDoc

返回一個BufferedImage作爲提供InputStream選自目前登記的那些自動選擇一個ImageReader的解碼結果。 InputStream包裝在ImageInputStream中。如果沒有註冊的ImageReader聲稱能夠讀取結果流,則返回null

看起來好像字節數組的內容不能被解碼爲已知的圖像格式。

0

如果修改aBitData的方式不代表任何圖像,假設 - 如果修改第一個字節,即圖像標題字節,而不是圖像數據,則可能存在獲取null的另一個原因。