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

标签 java swing fonts arabic graphics2d

我在 Java 中使用 graphcis2d,目前正在使用它来将文本绘制到缓冲图像中

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

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

这是我将使用的文本示例: 收起

最佳答案

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

关于java - 在java中绘制带有轮廓的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7465829/

相关文章:

java - 如何在 JTextArea 周围设置线条边框?

Android 自定义微调器未填充

java - 更改 JavaFX TreeTableView 的选择颜色

java - java中的继承私有(private)字段

java - JTable异常删除行

css - 服务器上的字体是否必须以特定方式链接?

html - CSS:为大下行字体制作厚 <a:hover> 下划线的正确方法

java - 为什么创建一个大的 Java 数组会消耗这么多内存?

java - 在java中滚动时 View 会扭曲

java - 通过JFrame表单更新MySQL数据库,同时刷新JFrame表单上的J表