Jeg har aldrig svaret på noget forumspørgsmål, men jeg har haft meget gavn af især stackoverflow, så jeg tænkte, at jeg skulle give noget tilbage mindst én gang. Da ovenstående problem plagede mig nu i næsten to dage, og jeg endelig fik sat en løsning sammen, tænkte jeg, at dette ville være et godt emne at give noget tilbage til samfundet.
Jeg havde det samme problem med at hente et billede (.png) fra en MongoDB/GridFS med Java-driveren. Først, som også beskrevet ovenfor, skal du hente filen Java-objekt:
import com.mongodb.*;
import com.mongodb.gridfs.*;
mongoClient = MongoClient('server_name',27017);
db = mongoClient.getDB('database_name');
imgData = GridFS(db,'image_data');
Ovenstående kodedel henter indsamlingen med billeddataene. Bagefter kan billeddata Java-objektet hentes:
javaIObj = imgData.findOne('image_name.png');
Nu er ByteArrayOutputStream nødvendig, hvor datastrømmen kan overføres til i stedet for en fil:
import java.io.ByteArrayOutputStream;
baos = ByteArrayOutputStream();
javaIObj.writeTo(baos);
Outputstrømmen skal igen føres ind i en ByteArrayInputStream, som kan bruges til at konstruere et ImageIO-objekt:
import java.io.ByteArrayInputStream;
import javax.imageio.ImageIO;
bais = ByteArrayInputStream(baos.toByteArray());
jbi = ImageIO.read(bais);
Nu kan selve Matlab-billedet som matrix hentes og vises:
nrows = jbi.getHeight; ncols = jbi.getWidth;
data = jbi.getData.getPixels(0,0,ncols,nrows,[]);
matImg = reshape(data,ncols,nrows)';
imagesc(matImg);
Jeg ved ikke, om dette er den perfekte løsning, men det virkede for mig.
Skål!