我想在Matlab中對數據庫中的某些圖像數據進行模擬。圖像數據來自java,作爲base64編碼的字節數組輸出。我不熟悉[java image]格式。但是,我寫了下面的基於一些與我一起工作的Java編寫的Matlab代碼。它們遵循相同的基本大綱,並且Java代碼能夠很好地讀取圖像。在Matlab代碼看起來是這樣的:Matlab:如何正確使用Java ImageIO類來獲取BufferedIMage
function [ result ] = queryDb(theQuery)
conn = database(...); % connect to the database
result = fetch(exec(conn, theQuery));
result = result.Data;
close(conn);
end
data = queryDb('sql query to get the data');
data = uint8(data{1,1});
data = org.apache.commons.codec.binary.Base64.decodeBase64(data);
data = uint8(127 + data); % the base64 decoder returns signed int8
import javax.imageio.ImageIO;
import java.io.ByteArrayInputStream;
dataStream = ByteArrayInputStream(data);
bufferedimage = ImageIO.read(dataStream);
在的bufferedimage
檢驗,它是double
空數組,而不是一個java BufferedImage
實例。
我對dataStream
進行了一些測試,看它是否按預期行事;排序沿線的一個小單元測試:
for jj = 1:10
for kk 1:10
assert(dataStream.read() == data(kk));
end;
dataStream.reset();
end;
它查出來,所以這讓我相信這個問題是ImageIO的或我使用它。
不幸的是,我沒有發現使用ImageIO(以及其他一些API)的例子,這些例子都以我在這裏概述的方式使用(在Matlab中)。
This code以相同的方式使用java.io.ByteArrayInputStream
- 就所提供的數據是字節數組而言。
This code本質上是我想要做的 - 將java圖像轉換爲Matlab數組。不幸的是,他們通過採用Matlab圖像進行欺騙,將其轉換爲Java圖像,然後將其返回。
This code使用ImageIO,但它通過從文件流中讀取來實現。我嘗試將數據寫入文件,然後使用java.io.File
讀取它,但是我得到的結果都是相同的。
所以,我不知所措。
哪些數據,數據流,和BufferedImage的定義? – Marvo
Matlab不是一種聲明性語言。代碼編寫的方式與我的評論相結合,將闡明它們代表的內容。數據是一個存儲爲int8數組的java圖像。我對格式不熟悉。如果你對Java很熟悉,那麼這可能會更明顯。問題是最後一行。直到dataStream產生的地步,所有的行爲都與此代碼的java版本相同。從流中讀取返回兩邊相同的數據。 ImageIO.read()在Matlab中無法正常工作,但我不確定原因。 –