Проблема с fillRoundRect, по-видимому, неправильно рендеринга - PullRequest
3 голосов
/ 31 января 2011

У меня есть очень простая программа для создания изображений, которая просто рисует скругленный прямоугольник на BufferedImage, а затем сохраняет изображение в файл.

try
{
    BufferedImage image = new BufferedImage(40, 40, BufferedImage.TYPE_INT_ARGB);

    Graphics2D g2 = image.createGraphics();
    g2.setPaint(Color.blue);

    g2.fillRoundRect(0, 0, 39, 39, 6, 6);

    File file = new File("C:\\test.png");

    ImageIO.write(image, "png", file);
}
catch( IOException e )
{
    e.printStackTrace();
}

Все работает, как и ожидалось, когда я рисую прямоугольник, используяdrawRoundRect:

enter image description here

Однако при использовании fillRoundRect прямоугольник обрезается с правой и нижней сторон:

enter image description here

Я пытался увеличить сам BufferedImage и сохранить прямоугольник того же размера, но проблема все еще существует.Кроме того, независимо от того, какую прямоугольную ширину и высоту или ширину и высоту дуги я выберу, 4 угла никогда не будут выглядеть одинаково (хотя чем больше размер, тем менее выраженным он кажется).

Это обычное явление?проблема, или я, возможно, неправильно понимаю закругленный прямоугольник?

Любая помощь или предложения будут высоко оценены.

Спасибо,

BJ

1 Ответ

7 голосов
/ 01 февраля 2011

Вы пробовали включить сглаживание?

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...