Nigdy nie odpowiadałem na żadne pytanie na forum, ale wiele zyskałem, zwłaszcza na stackoverflow, więc pomyślałem, że muszę przynajmniej raz coś oddać. Ponieważ powyższy problem nękał mnie teraz przez prawie dwa dni i w końcu poskładałem rozwiązanie, pomyślałem, że to dobry temat, aby dać coś społeczności.
Miałem ten sam problem z pobieraniem obrazu (.png) z MongoDB/GridFS ze sterownikiem Java. Najpierw, jak opisano powyżej, musisz pobrać obiekt Java pliku:
import com.mongodb.*;
import com.mongodb.gridfs.*;
mongoClient = MongoClient('server_name',27017);
db = mongoClient.getDB('database_name');
imgData = GridFS(db,'image_data');
Powyższa część kodu pobiera kolekcję z danymi obrazu. Następnie można pobrać obiekt Java z danymi obrazu:
javaIObj = imgData.findOne('image_name.png');
Teraz ByteArrayOutputStream jest potrzebny, gdzie strumień danych może być przesyłany potokiem zamiast pliku:
import java.io.ByteArrayOutputStream;
baos = ByteArrayOutputStream();
javaIObj.writeTo(baos);
Strumień wyjściowy musi zostać ponownie przesłany do ByteArrayInputStream, którego można użyć do skonstruowania obiektu ImageIO:
import java.io.ByteArrayInputStream;
import javax.imageio.ImageIO;
bais = ByteArrayInputStream(baos.toByteArray());
jbi = ImageIO.read(bais);
Teraz rzeczywisty obraz Matlaba jako macierz można pobrać i wyświetlić:
nrows = jbi.getHeight; ncols = jbi.getWidth;
data = jbi.getData.getPixels(0,0,ncols,nrows,[]);
matImg = reshape(data,ncols,nrows)';
imagesc(matImg);
Nie wiem, czy to idealne rozwiązanie, ale mi się udało.
Pozdrawiam!