Измените размер изображения при хранении соотношения сторон в Java

Есть ли способ использовать пакеты LaTeX с MathJax?

Нет. MathJax не является латексом; он обрабатывает ввод, похожий на LaTeX (настолько близкий, насколько это возможно, к истинному LaTeX), но способ, которым он работает под капотом, сильно отличается. В частности, одно отличие состоит в том, что MathJax реализует только макросы математического режима, а не все другие текстовые режимы или макросы общей обработки и управляющие последовательности. Таким образом, большинство инструментов, используемых пакетами LaTeX, отсутствуют. Это означает, что вы не можете просто поместить пакет LaTeX в MathJax. Пакеты, которые поддерживает MathJax, должны быть повторно реализованы в javascript, что сложно для нетривиальных пакетов (таких как тот, который вы цитируете).

17
задан Zar 28 January 2013 в 16:01
поделиться

3 ответа

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);

8
ответ дан 30 November 2019 в 09:58
поделиться

Если вы хотите изменить размер изображения с 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);
0
ответ дан 30 November 2019 в 09:58
поделиться

Если известны ширина, высота источника и цели, используйте следующую функцию для определения масштаба изображения.

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);
8
ответ дан 30 November 2019 в 09:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: