setborder - Dibujando texto con contorno en java
setborder java (3)
Estoy trabajando con graphcis2d en Java y actualmente estoy usando esto para dibujar texto en una imagen búfer
Font font1 = new Font("Arial", Font.PLAIN, 120);
g2d.setFont(font1);
FontMetrics fm1 = g2d.getFontMetrics(font1);
g2d.drawString(s[1], width/2-fm1.stringWidth(s[1])/2, height/4-70);
Quiero dibujar este texto con un esquema de color diferente.
GlyphVector gv = font1.createGlyphVector(g2d.getFontRenderContext(), s[1]);
Shape shape = gv.getOutline();
g2d.setStroke(new BasicStroke(4.0f));
g2d.translate(width/2-fm1.stringWidth(s[1])/2, height/4-70);
g2d.draw(shape);
El problema con el uso de este método, que funciona, es que estoy trabajando con caracteres árabes y usar GlyphVector invierte el orden y no hace que las letras fluyan entre sí.
¿Puede alguien explicarme por favor cómo hacer un texto árabe en un color y un bosquejo con otro?
Aquí hay una muestra del texto que estaría usando: الرحمن
Tratar de usar
layoutGlyphVector(FontRenderContext frc, char[] text, int start, int limit, int flags)
en lugar de createGlyphVector
Un truco es dibujar el texto varias veces en el color del contorno, variando la posición por el ancho del contorno en las direcciones +/- x y +/- y, luego dibujar en el color de primer plano en la posición nominal. No es perfecto, pero tiende a verse bastante bien, siempre que el contorno no sea demasiado grueso con respecto al ancho del trazo de las letras.
Puede utilizar el método createStrokedShape()
en la Shape
del glifo devuelto por getOutline()
. Ver también CompositeStroke
, demostrado aquí .