Рисование текста с контуром в Java - PullRequest
5 голосов
/ 19 сентября 2011

Я работаю с graphcis2d в Java и в настоящее время использую это для рисования текста в bufferedImage

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);

Я хочу нарисовать этот текст с другим цветным контуром.

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);        

Проблема с использованием этого метода, который работает, заключается в том, что я работаю с арабскими символами, а использование GlyphVector меняет порядок и не заставляет буквы перетекать друг с другом.

Может кто-нибудь объяснить мне, как сделать арабский текст одним цветом и нарисовать контур другим?

Вот пример текста, который я бы использовал: الرحمن

Ответы [ 3 ]

2 голосов
/ 19 сентября 2011

Вы можете использовать метод createStrokedShape() на глифе Shape, возвращаемом getOutline().См. Также CompositeStroke, продемонстрировано здесь .

2 голосов
/ 19 сентября 2011

Попробуйте использовать

layoutGlyphVector(FontRenderContext frc, char[] text, int start, int limit, int flags) 

вместо createGlyphVector

1 голос
/ 19 сентября 2011

Один трюк состоит в том, чтобы несколько раз нарисовать текст цветом контура, изменив положение на ширину контура в направлениях +/- x и +/- y, затем нарисуйте цвет переднего плана в номинальном положении.Он не идеален, но имеет тенденцию выглядеть довольно хорошо, если контур не слишком толстый по отношению к ширине обводки букв.

...