在java中绘制文本与大纲

时间:2011-09-19 02:05:59

标签: java swing fonts arabic graphics2d

我正在使用Java中的graphcis2d,目前正在使用它将文本绘制成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 个答案:

答案 0 :(得分:2)

您可以在Shape返回的字形getOutline()上使用createStrokedShape()方法。另请参阅CompositeStroke,演示here

答案 1 :(得分:2)

尝试使用

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

而不是createGlyphVector

答案 2 :(得分:1)

一个技巧是在轮廓颜色中多次绘制文本,在+/- x和+/- y方向上通过轮廓宽度改变位置,然后在标称位置绘制前景色。它并不完美,但如果轮廓相对于字母的笔划宽度不太厚,它看起来会很好看。

相关问题