Java Graphics.fillPolygon: Como também renderizar as bordas direita e inferio

Ao desenhar polígonos, o Java2D deixa as bordas direita e inferior. Eu entendo por que isso é feito. No entanto, eu gostaria de desenhar algo que inclua essas bordas. Uma coisa que me ocorreu foi seguirfillPolygon comdrawPolygon com as mesmas coordenadas, mas isso parece deixar um espaço. (Veja a pequena imagem triangular na parte inferior.) Existem duas possibilidades, mas não sei dizer qual. Para ativar o antialiasing, estou fazendo o seguinte:

renderHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
                  RenderingHints.VALUE_ANTIALIAS_ON);
renderHints.put(RenderingHints.KEY_RENDERING,
                RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHints(renderHints);

Uma possibilidade é que o anti-aliasing não esteja sendo realizado no canal alfa; portanto, a diferença é causada pelo excesso. Nesse caso, se o canal alfa fosse o que estava sendo suavizado, as bordas se encaixariam corretamente. A outra possibilidade é que haja apenas uma lacuna aqui.

Como posso consertar isso

Além disso, não tenho certeza, mas parece que o contorno do polígono pode ser MUITO GRANDE. Ou seja, pode estar indo além das bordas direita e inferior que eu quero incluir.

Obrigado

- ATUALIZAÇÃO -

Com base em uma sugestão muito agradável da Hovercraft Full of Eels, fiz um exemplo compilável:

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class polygon {
   private static final int WIDTH = 20;

   public static void main(String[] args) {
      BufferedImage img = new BufferedImage(WIDTH, WIDTH, BufferedImage.TYPE_INT_ARGB);
      Graphics2D g2 = img.createGraphics();
      int[] xPoints = {WIDTH / 3, (2*WIDTH) / 3, WIDTH / 3};
      int[] yPoints = {0, WIDTH / 2, WIDTH};
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
      g2.setColor(Color.green);
      g2.drawLine(0, WIDTH-1, WIDTH, WIDTH-1);
      g2.drawLine(0, 0, WIDTH, 0);
      g2.drawLine(WIDTH/3, 0, WIDTH/3, WIDTH);
      g2.drawLine((2*WIDTH/3), 0, (2*WIDTH/3), WIDTH);
      g2.setColor(Color.black);
      g2.drawPolygon(xPoints, yPoints, xPoints.length);
      g2.setColor(Color.black);
      g2.fillPolygon(xPoints, yPoints, xPoints.length);
      g2.dispose();

      ImageIcon icon = new ImageIcon(img);
      JLabel label = new JLabel(icon);

      JOptionPane.showMessageDialog(null, label);
   }
}

Se você deixar o polígono preenchido em vermelho, poderá obter a imagem abaixo (ampliada em 500%), que mostra que o polígono não se estende até a borda direita. Ou seja, a linha verde vertical corresponde ax=(2*WIDTH)/2, e embora o polígono vermelho inclua essa coordenada, ele não pinta nenhum pixel lá.

Para ver o problema do gap, mudeired no programa parablack. Nesta imagem, você pode ver um espaço sutil no lado inferior direito, onde o contorno desenhado pordrawPolygon não encontra exatamente o que foi desenhado comfillPolygon.

questionAnswers(2)

yourAnswerToTheQuestion