2011-02-25 16 views
5

Estoy intentando usar J/Link para obtener una imagen de Mathematica a Java. Soy capaz de imprimir la imagen en Mathematica como esto:Obteniendo una imagen de Mathematica en Java

Print[ Graphics[Raster[ img[[1]] ], AspectRatio->Automatic, ImageSize->530 ] ]; 

He intentado devolver los datos de la función de Mathematica de varias maneras: Código

Return [ Image[Graphics[Raster[ img[[1]] ], AspectRatio->Automatic, ImageSize->530 ]] ]; 

Return [ Graphics[Raster[ img[[1]] ], AspectRatio->Automatic, ImageSize->530 ] ]; 

Return [ Raster[ note1[[1]] ] ]; 

Return [ note1[[1]] ]; 

Mi Java:

ml.evaluate("tmp = renderImageGeneric[" + sampleId + ", noteText," + sizeX + "," + sizeY + ", margin," + dpi + "," + lineStep + "," + tabStep + "," + ligatureMatch + "," + maxLigHeightDiff + "," + mmSearch + "," + highToLowGap + "," + lowToHighGap + "," + wordBaselineVariance + "," + debugFlag + "]"); 

ml.discardAnswer(); 
byte[] res = ml.evaluateToImage("tmp", 0, 0); 
ByteArrayInputStream strm = new ByteArrayInputStream(res); 
BufferedImage imag = ImageIO.read(strm); 
//BufferedImage imag = ImageIO.read(new InputStream(res)); 
if(imag != null) { 
     ImageIO.write(imag, "png", new File("/Users/Rebecca/","test.png")); 
}else { 
     System.out.println("image is null"); 
} 

Al depurar, obtengo una gran matriz de bytes en res. La imagen se guarda, pero está en blanco (es decir, una imagen blanca).

Si devuelvo solo una cadena ("azul"), se guarda una imagen con la cadena azul.

Supongo que tengo que devolver algo diferente en renderImageGeneric, pero no puedo entender qué.

Gracias!

Respuesta

2

yo no era capaz de conseguir el retorno de la función correctamente. Sin embargo, cambié el curso y Mathematica sacó la imagen a un archivo. Pasé un camino a la función de Mathematica para que Java supiera dónde está. No es la mejor solución pero funciona bien.

0

¿Usted intentó somenthing como

 Return[ExportString[Graphics[Disk[], ImageSize -> 100], "PNG"]] 
+0

Eso tampoco funcionó. No estoy seguro de lo que está pasando, pero JLink simplemente no parece estar evaluando correctamente el retorno de una función. – rmw

Cuestiones relacionadas