2011-02-25 24 views
5

Próbuję użyć J/Link, aby uzyskać obraz z Mathematica do Java. Jestem w stanie wydrukować obraz w Mathematica tak:Uzyskiwanie obrazu Mathematica w Javie

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

Próbowałem powrocie dane z funkcji Mathematica na różne sposoby: kod

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]] ]; 

My 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"); 
} 

Podczas debugowania otrzymuję dużą tablicę bajtów w res. Obraz zostanie zapisany, ale będzie pusty (tzn. Biały obraz).

Jeśli zwrócę tylko ciąg ("niebieski"), obraz z niebieskim ciągiem zostanie zapisany.

Zakładam, że muszę zwrócić coś inaczej w renderImageGeneric, ale nie mogę dowiedzieć się, co.

Dzięki!

Odpowiedz

2

I nie był w stanie uzyskać zwrot z funkcji prawidłowo. Jednak zmieniłem kurs i Mathematica wyprowadził obraz do pliku. Podałem ścieżkę do funkcji Mathematica, aby Java wiedziała, gdzie ona jest. Nie jest to najlepsze rozwiązanie, ale działa.

0

Próbowałeś somenthing jak

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

To też nie działa. Nie jestem pewien, co się dzieje, ale JLink po prostu nie wydaje się poprawnie oceniać zwrotu funkcji. – rmw