フォーラムの質問に答えたことはありませんが、特にstackoverflowの恩恵を受けているので、少なくとも1回は何かを返す必要があると思いました。上記の問題が2日間近く私を悩ませていたので、私は最終的に解決策をつなぎ合わせました。これはコミュニティに何かを返すための良いトピックになると思いました。
Javaドライバーを使用してMongoDB/GridFSから画像(.png)を取得するという同じ問題がありました。まず、上記でも説明したように、ファイルJavaオブジェクトを取得する必要があります。
import com.mongodb.*;
import com.mongodb.gridfs.*;
mongoClient = MongoClient('server_name',27017);
db = mongoClient.getDB('database_name');
imgData = GridFS(db,'image_data');
上記のコード部分は、画像データを含むコレクションを取得しています。その後、画像データのJavaオブジェクトを取得できます。
javaIObj = imgData.findOne('image_name.png');
ここで、ファイルの代わりにデータストリームをパイプできる場所にByteArrayOutputStreamが必要です。
import java.io.ByteArrayOutputStream;
baos = ByteArrayOutputStream();
javaIObj.writeTo(baos);
出力ストリームは、ImageIOオブジェクトの構築に使用できるByteArrayInputStreamに再度パイプ処理する必要があります。
import java.io.ByteArrayInputStream;
import javax.imageio.ImageIO;
bais = ByteArrayInputStream(baos.toByteArray());
jbi = ImageIO.read(bais);
これで、マトリックスとしての実際のMatlab画像を取得して表示できます。
nrows = jbi.getHeight; ncols = jbi.getWidth;
data = jbi.getData.getPixels(0,0,ncols,nrows,[]);
matImg = reshape(data,ncols,nrows)';
imagesc(matImg);
これが完璧な解決策かどうかはわかりませんが、うまくいきました。
乾杯!