行列のグラフを作成し、これらのグラフを JSP に表示する必要があります。プロジェクトは Java で開発されており、これまでのところ、行列に関連するすべての操作は MatLabControl API http://code.google.com/p/matlabcontrol/を使用して実行されています。
MATLAB によって生成された行列 (特に固有値行列とウェーブレット) を返したかったのです。MATLAB は、グラフ イメージを MATLAB 表現から java.awt.Image に変換する関数 "im2java" を提供します。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
私の使い方が間違っていない限り、これは基本的に上記のコードが機能するという希望に終止符を打ちます。
NBコードは正しいグラフを生成しますが、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?