Поскольку я не мог найти нужную библиотеку на C++, чтобы использовать для рендеринга изображений из TeX без зависимости от LaTeX, я решил использовать GIWS. Я также попытался MimeTeX, но я не мог найти его достаточно для моего проекта (это не легко работать с C++, и оказанные изображения не хорошо, кроме того, не .gif .png)
Это мой Java код:Процесс завершения GIWS при построении класса
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 для C++; и NetBeans для Java, под Ubuntu Quantal Quetzal.
я понял, что что-то не так с CLatex.cpp, и этот файл создается GIWS (я сделал не касайтесь его вообще). Чтобы обнаружить это, он поместил выход (88) в разные места в этом файле (88 - это просто случайный отладочный int). Когда я ставлю это управление ПОСЛЕ «return curEnv», он становится 1 (не 88!); " в CLatex.cpp (это в 54. строке, в методе JNIEnv * CLatex :: getCurrentEnv()) И когда компилятор компилирует этот код, ничего не получается, возникает проблема, когда компилятор связывает объектные файлы. Таким образом, я предполагаю, что в GIWS есть ошибка (я даже попробовал оригинальный пример) –