gpt4 book ai didi

java - 在 Java 中绘制带轮廓的字符串有什么更好的方法吗?

转载 作者:行者123 更新时间:2023-12-01 14:21:24 24 4
gpt4 key购买 nike

我需要在从图像中获取的 Graphics 对象上绘制带有黑色轮廓的白色文本。我首先用黑色绘制相同的文本 4 次(向左或向右移动一个像素),然后用白色绘制一次。然而,如果轮廓需要超过 1px 宽,这将不会很好地工作,而且看起来真的很像 hack。有更好的方法吗?

final BufferedImage image = ImageIO.read(new File("./test.jpg"));

Graphics g = image.getGraphics();
g.setFont(g.getFont().deriveFont(45F));

// coordinates
int x = 100;
int y = 100;

String text = "Hello world";

g.setColor(Color.black);
g.drawString(text, x + 1, y - 1);
g.drawString(text, x + 1, y + 1);
g.drawString(text, x - 1, y - 1);
g.drawString(text, x - 1, y + 1);

g.setColor(Color.white);
g.drawString(text, x, y);

截图:https://i.imgur.com/ONLsPxy.png

最佳答案

另一种选择是使用下面的一段代码来创建一个形状,然后先绘制轮廓然后填充它:

        Graphics2D g2d = (Graphics2D)g;
AffineTransform transform = g2d.getTransform();
transform.translate(x, y);
g2d.transform(transform);
g2d.setColor(Color.black);
FontRenderContext frc = g2d.getFontRenderContext();
TextLayout tl = new TextLayout(text, g.getFont().deriveFont(45F), frc);
Shape shape = tl.getOutline(null);
g2d.setStroke(new BasicStroke(5f));
g2d.draw(shape);
g2d.setColor(Color.white);
g2d.fill(shape);

输出:

enter image description here

关于java - 在 Java 中绘制带轮廓的字符串有什么更好的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51329346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com