Soy nuevo en Java y trato de usar gráficos Java2D para crear una imagen. Pero el resultado viene como anti-aliased. Intenté muchas formas de rectificarlo, pero no funciona. Los personajes están distorsionados o dentados.Gráficos de Java2D antialias
public BufferedImage createNameOnButton(String label) {
int messageWidth = 0;
Font font = new Font("Arial", Font.PLAIN, 11);
BufferedImage bi = new BufferedImage(
10, 10, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = (Graphics2D) bi.getGraphics();
g2d.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(
RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setRenderingHint(
RenderingHints.KEY_FRACTIONALMETRICS,
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
g2d.setFont(font);
bi = g2d.getDeviceConfiguration()
.createCompatibleImage(500, 30, Transparency.BITMASK);
FontMetrics fm = bi.getGraphics().getFontMetrics(font);
int messageHeight = fm.getHeight() - fm.getDescent();
for (char ch : label.toCharArray()) {
messageWidth += fm.charWidth(ch);
}
bi = bi.getSubimage(50, 0, messageWidth + 10, fm.getHeight());
Graphics g = bi.getGraphics();
g.setColor(Color.black);
AttributedString as = new AttributedString(label);
as.addAttribute(TextAttribute.FONT, font);
g.drawString(as.getIterator(), 5, messageHeight);
g2d.dispose();
g.dispose();
return bi;
}
¿Alguien me puede ayudar a solucionar el error?
¿Qué está creando primero una imagen 10x10? Su código es realmente intrincado por lo que se supone que debe hacer. –
No estoy completamente seguro de entender. Por su pregunta, entiendo que no quiere que los personajes sean antialias. Pero al leer el código, no es de extrañar, ya que dice ANTIALIAS_ON en todas partes. ¿Podrías explicar? –
Gracias por afirmar que - Probé el código con ANTIALIAS_OFF pero hay algunos caracteres que aún aparecen como anti-alias (no todos los caracteres) como, la '\' vertical de N, 'a', 'v', 'e' , y ',' o '- básicamente los bordes de los caracteres no son suaves. ¿Hay algo más que tenga que hacer? – Prakash