Я согласен с предложением Graphics2D.setRenderingHint()
.Попробуйте KEY_INTERPOLATION
с VALUE_INTERPOLATION_BILINEAR
.
Кроме того, попробуйте увеличить исходное изображение в 4 раза больше, чем вы хотите нарисовать, и затем используйте Graphics2D.scale(1/multiple)
в дополнение к повороту.
Причина: без масштабирования диагональ пикселя в 1,4+ раза больше края, поэтому при повороте приближается к нечетным кратным 45 градусам, 14+ пикселей в изображении отрисовываются со ссылкой натолько 10 в исходном изображении.Это добавляет неровности к результату.
Другой подход заключается в использовании BufferedImage
для источника и получателя:
tx = new AffineTransform();
tx.rotate(theta, xCenter, yCenter)
op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
BufferedImage destImg = op.filter(srcImg, null);
Наконец, переключение на OpenGL
(например, с JOGL или LWGL) обеспечивает все виды контроля надсглаживание и многое другое.С другой стороны, это открывает двери для несовместимости оборудования, поскольку многие графические драйверы имеют OpenGL
ошибок IME.