在Java中使用轮廓绘制文本

5

我正在使用Java中的graphics2d,并且目前正在使用它将文本绘制到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

尝试使用

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

使用createGlyphVector的替代方法


2

一个技巧是使用轮廓颜色多次绘制文本,通过在正负x和正负y方向上变化轮廓宽度的位置,然后在前景色中在名义位置绘制。虽然不是完美的,但如果轮廓与字母的笔画宽度相比不太粗,它往往看起来非常好。


我看到边界上有黑点。 - Sorter
1
@Sorter - 很抱歉听到这个消息。如果没有关于你正在做什么或者你看到了什么具体的细节,我就无法猜测原因。不过,正如我所说,这种方法“并不完美”。 - Ted Hopp

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接