2012-04-30 56 views
3

我有一个要求,可以生成矩阵图并在JSP上显示这些图。该项目是在Java中开发的,到目前为止,我所有与矩阵有关的操作都是使用MatLabControl API执行的 http://code.google.com/p/matlabcontrol/在Matlab中创建图并在Java程序中显示它们

我想返回由MATLAB产生的矩阵(特别是特征值矩阵和小波)。 MATLAB提供了一个函数“im2java”,它将图形图像从MATLAB表示转换为java.awt.Image。我用来获取MatlabControl图像数据的代码如下:

public Image produceEigenValueGraph(final double [][] matrix) { 
final double [][] maxEigenValueMatrix = 
      extractOutMaxEigenValues(matrix); 
    Image matlabPlotImage = null; 
    try { 
     MatlabNumericArray matLabEigenValueMatrix = 
       new MatlabNumericArray(maxEigenValueMatrix, null); 
     matLabTypeConverter.setNumericArray("eigen", 
              matLabEigenValueMatrix); 
     matLabProxy.setVariable("amountOfTime", matrix.length - 1); 
     matLabProxy.eval("time"); 
     matLabProxy.eval("plot(time, eigen)"); 
     matLabProxy.eval("frame=getframe"); 
     final Object [] returnedMatlabArguements = 
       matLabProxy.returningEval("im2java(frame.cdata)", 1); 
     matlabPlotImage = 
       (Image)returnedMatlabArguements[0]; 
    } catch (MatlabInvocationException mie) { 
     mie.printStackTrace(); 
    } 
    return matlabPlotImage; 
} 

的代码返回一个嵌套异常:

Caused by: java.io.WriteAbortedException: writing aborted; 
java.io.NotSerializableException: sun.awt.image.ToolkitImage 

这基本上杜绝了上面的代码工作的希望,除非我在使用中不正确。

N.B的代码确实能产生正确的图形它未能在java.awt.Image中

我的问题返回它是:

-Is the above code the correct/only way to return images to a java program from Matlab? 
    -If it is what would be the best alternatives to using Matlab, Java API or otherwise? 
+0

我建议保存图像为PNG文件(或内存流)。 –

回答

0

这是导致异常的行?

matlabPlotImage = (Image)returnedMatlabArguements[0]; 

在回答你的问题

“-is上面的代码正确/只有这样,才能图像返回从MATLAB java程序?”

您可以从MATLAB调用java类,所以你也可以使用Java在Matlab的文件并调用替换

final Object [] returnedMatlabArguements = matLabProxy.returningEval("im2java(frame.cdata)", 1); 
matlabPlotImage = (Image)returnedMatlabArguements[0]; 

错误被抛出,因为图像是不可被序列化。一个选项是使用matlab或java将其保存为某种图像格式(jpg,png,tiff)的文件,然后返回File而不是Image。

“ - 如果是使用Matlab,Java API或其他方式的最佳选择?”

Mathworks提供了一个Java API来执行许多可以实现的线性代数计算。 http://math.nist.gov/javanumerics/jama/#Package

替代地,Apache的百科全书数学项目提供宽范围的线性代数函数以及其他工具。 http://commons.apache.org/math/userguide/linear.html

我会检查其他职位对图形建议在Java

constructing graphs in Java

Java Graphing Libraries for Web Applicattions?

相关问题