在java中绘制带有轮廓的文本

发布于 2024-12-05 15:04:13 字数 692 浏览 0 评论 0原文

我正在 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 会颠倒顺序,并且不会使字母彼此流动。

有人可以向我解释如何用一种颜色渲染阿拉伯文本并用另一种颜色绘制轮廓吗?

这是我将使用的文本示例: 拉瑞姆

I'm working with graphcis2d in Java and am currently using this to draw text into a 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);

I want to draw this text with an different color outline.

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

The problem with using this method, which works, is that I am working with arabic characters and using GlyphVector reverses the order and doesn't make the letters flow with one another.

Can someone please explain to me how to render arabic text in one color and have an outline with another?

Heres a sample of the text I would be using:
الرحمن

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

只怪假的太真实 2024-12-12 15:04:13

一种技巧是用轮廓颜色多次绘制文本,在 +/- x 和 +/- y 方向上通过轮廓宽度改变位置,然后在标称位置处绘制前景色。它并不完美,但只要轮廓相对于字母的笔划宽度不是太粗,它看起来就会相当不错。

One trick is to draw the text several times in the outline color, varying the position by the outline width in +/- x and +/- y directions, then draw in the foreground color at the nominal position. It isn't perfect, but it tends to look pretty good provided the outline isn't too thick with respect to the stroke width of the letters.

少女净妖师 2024-12-12 15:04:13

您可以使用方法 createStrokedShape () 位于 getOutline() 返回的字形 Shape 上。另请参阅CompositeStroke,演示了此处

You may be able to use the method createStrokedShape() on the glyph's Shape returned by getOutline(). See also CompositeStroke, demonstrated here.

雨后咖啡店 2024-12-12 15:04:13

尝试使用

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

而不是 createGlyphVector

Try to use

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

instead of the createGlyphVector

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文