データベース内のいくつかの画像データについて、Matlab でモックアップを作成しようとしています。画像データはJavaからのもので、base64でエンコードされたバイト配列として出力されます。[java image] 形式に詳しくありません。ただし、私と一緒に働いている人が書いたJavaに基づいて、次のMatlabコードを書きました。それらは同じ基本的なアウトラインに従っており、Java コードは画像を問題なく読み取ることができます。Matlab コードは次のようになります。
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 );
を調べると、これはJavaインスタンスではなくbufferedimage
の空の配列です。double
BufferedImage
dataStream
期待どおりに動作するかどうかを確認するために、いくつかのテストを実行しました。次の行に沿った一種のミニ単体テスト:
for jj = 1:10
for kk 1:10
assert( dataStream.read() == data(kk) );
end;
dataStream.reset();
end;
チェックアウトしたので、問題は ImageIO またはその使用にあると思われます。
残念ながら、ImageIO (およびこれらの他の API のいくつか) を使用するために私が見つけた例はどれも、ここで概説した方法 (つまり、Matlab) で使用されていません。
このコードはjava.io.ByteArrayInputStream
、提供されたデータがバイトの配列であるという意味で、同じ方法で使用します。
このコードは、本質的に私がやろうとしていることです - Java 画像を Matlab 配列に変換します。残念なことに、彼らは Matlab の画像を取得し、それを Java の画像に変換してから元に戻すという方法でごまかしています。
このコードでは ImageIO を使用していますが、これはファイル ストリームから読み取ることによって行われます。データをファイルに書き込んでから、を使用して読み込もうとしましたjava.io.File
が、どちらの方法でも同じ結果が得られます。
だから、私は途方に暮れています。