簡體   English   中英

在 Java 中繪制帶輪廓的字符串有什么更好的方法嗎?

[英]Any better way to draw string with outline in Java?

我需要在從圖像中獲得的Graphics對象上繪制帶有黑色輪廓的白色文本。 我首先用黑色繪制相同的文本 4 次(向左或向右移動一個像素),然后用白色繪制一次。 但是,如果輪廓需要超過 1px 寬,這將無法正常工作,而且看起來真的很像黑客。 有一個更好的方法嗎?

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

輸出:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM