Есть ли способ использовать пакеты LaTeX с MathJax?
Нет. MathJax не является латексом; он обрабатывает ввод, похожий на LaTeX (настолько близкий, насколько это возможно, к истинному LaTeX), но способ, которым он работает под капотом, сильно отличается. В частности, одно отличие состоит в том, что MathJax реализует только макросы математического режима, а не все другие текстовые режимы или макросы общей обработки и управляющие последовательности. Таким образом, большинство инструментов, используемых пакетами LaTeX, отсутствуют. Это означает, что вы не можете просто поместить пакет LaTeX в MathJax. Пакеты, которые поддерживает MathJax, должны быть повторно реализованы в javascript, что сложно для нетривиальных пакетов (таких как тот, который вы цитируете).
For starters - take a look at line 2. Shouldnt that be getHeight()
?
You dont want a while loop for the resizing, you want to find out the resizing ratio, which is a simple bit of math.
(width / height) = (new_width / new_height)
If you know one of the 'new' sizes, the other can be found via multiplication
new_height * (width / height) = new_width
You can also use the lazy method provided by BufferedImage's
superclass Image, getScaledInstance()
- using -1 for either width or height will maintain aspect ratio
ex:
scaledPic = picture.getScaledInstance(new_width, -1, Image.SCALE_FAST);
Если вы хотите изменить размер изображения с w0 x h0 на w1 x h1, сохраняя соотношение сторон, вычислите масштаб по вертикали и горизонтали и выберите меньшее.
double scalex = 1;
double scaley = 1;
if (scalingMode == ScalingMode.WINDOW_SIZE) {
scalex = (double)getWidth() / frontbuffer.getWidth();
scaley = (double)getHeight() / frontbuffer.getHeight();
} else
if (scalingMode == ScalingMode.KEEP_ASPECT) {
double sx = (double)getWidth() / frontbuffer.getWidth();
double sy = (double)getHeight() / frontbuffer.getHeight();
scalex = Math.min(sx, sy);
scaley = scalex;
// center the image
g2.translate((getWidth() - (frontbuffer.getWidth() * scalex)) / 2,
(getHeight() - (frontbuffer.getHeight() * scaley)) / 2);
}
g2.scale(scalex, scaley);
if (interpolation != ImageInterpolation.NONE) {
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, interpolation.hint);
}
g2.drawImage(frontbuffer, 0, 0, null);
Если известны ширина, высота источника и цели, используйте следующую функцию для определения масштаба изображения.
private double determineImageScale(int sourceWidth, int sourceHeight, int targetWidth, int targetHeight) {
double scalex = (double) targetWidth / sourceWidth;
double scaley = (double) targetHeight / sourceHeight;
return Math.min(scalex, scaley);
}
Затем используйте этот масштаб для увеличения / уменьшения изображения с помощью следующий код
Image scaledImage = sourceBufferedImage.getScaledInstance((int) (width * scale), (int) (height * scale), Image.SCALE_SMOOTH);