Я пытаюсь отобразить строку, но если строка начинается за пределами реальных границ холста, я получаю странное поведение.
Например, я иногда получаю это изображение вместо правильной строки:
Правильная строка выглядела бы так:
Вот код запуска для создания этого примера:
import java.awt.image.*;
import javax.imageio.ImageIO;
import java.io.File;
import java.awt.*;
import java.awt.geom.*;
public class Render {
public static void main(String[] args) throws Exception {
BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = (Graphics2D) image.getGraphics();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g.setColor(Color.WHITE);
g.fillRect(0, 0, 100, 100);
g.setColor(Color.BLACK);
g.setStroke(new BasicStroke(2));
g.draw(new Line2D.Double(-92, 37, 88, 39));
g.dispose();
ImageIO.write(image, "png", new File("output.png"));
}
}
Я пробовал использовать множество различных подсказок рендеринга, но никакая комбинация не избавилась от этой проблемы. Что может быть виновником?
Edit:
Здесь изображение с RenderingHints.VALUE_STROKE_NORMALIZE:
Масштабированная версия изображения (g.scale(10,10)
):