1

由于我在 C++ 中找不到合适的库来用于从 TeX 渲染图像,而不依赖于 LaTeX,所以我决定使用 GIWS。我也尝试了 mimeTeX,但我的项目找不到足够的它(它不容易与 C++ 一起使用,渲染的图像也不好,而且 .gif 不是 .png)
这是我的 Java 代码:

package clatex;

import java.io.IOException;
import org.scilab.forge.jlatexmath.TeXConstants;
import org.scilab.forge.jlatexmath.TeXFormula;
import org.scilab.forge.jlatexmath.TeXIcon;

import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class CLatex {
    public CLatex(){

    }

    public int turn(int a) throws IOException{
        String math = "X+X";

        TeXFormula formule = new TeXFormula(math);
        TeXIcon ti = formule.createTeXIcon(TeXConstants.STYLE_DISPLAY, 40);
        BufferedImage b = new BufferedImage(ti.getIconWidth(), ti.getIconHeight(), BufferedImage.TYPE_4BYTE_ABGR);

        File outputfile = new File("saved.png");
        ImageIO.write(b, "png", outputfile);
        return 0;
    }
}`

总结这段代码:我有一个名为 clatex 的包,我正在使用 org.scilab.forge.jlatexmath。方法 int turn() 创建“saved.png”,构造函数为空。我也测试了这段代码。
这是 CLatex.giws.xml:

<?xml version="1.0" encoding="UTF-8"?>
<package name="CLatex">
  <object name="CLatex">
      <method name="turn" returnType="int">
        <param type="int" name="a" />
      </method>
  </object>
</package>

此代码与 GIWS 相关。

GIWS 呈现此代码并生成 CLatex.cpp 和 CLatex.h。这是我的 C++ 代码:

#include "latex/CLatex.h"
#include <jni.h>
JavaVM* create_vm() {
    JavaVM* jvm; JNIEnv* env;

    JavaVMInitArgs args;
    JavaVMOption options[2];

    /* There is a new JNI_VERSION_1_4, but it doesn't add anything for the purposes of our example. */
    args.version = JNI_VERSION_1_4;

    args.nOptions = 2;
    options[0].optionString = "-Djava.class.path=.";

    options[1].optionString = "-Xcheck:jni";
    args.options = options;

    args.ignoreUnrecognized = JNI_FALSE;

    JNI_CreateJavaVM(&jvm, (void **)&env, &args);

    return jvm;
}

int main(){
    JavaVM* jvm = create_vm();

    CLatex::CLatex *test =
    new CLatex::CLatex(jvm);

    return test->turn(22);
}

当我使用此代码时,它写道:“进程以状态 1(0 分钟,0 秒)终止”。它不编译并给出错误。
我不知道我的代码的哪一部分是错误的,Java、XML 或 C++(也许 GIWS 有问题?)。不幸的是,我不擅长 Java,但试图处理它。谢谢您的帮助。
作为说明,我使用 Code::Blocks 和 GCC for C++;和 NetBeans for Java,在 Ubuntu Quantal Quetzal 下。

4

2 回答 2

1

我添加了一个关于如何在 git 存储库 JLaTeXMath中使用包装器从 C++调用的示例:http: //forge.scilab.org/index.php/p/jlatexmath/source/tree/master/examples/GIWSGIWS

于 2013-02-23T17:24:12.770 回答
0

GIWS 生成 C++ 代码。因此,我不明白如何获得 CLatex.h。

告诉您正在使用哪个版本的 GIWS 也会有所帮助。

最后,您应该使用调试器来查看发生了什么。

于 2013-02-20T22:52:34.267 回答