Graphics2D.drawString输出文字如何实现字体描边的效果

时间:2021-10-05 11:22:41
字体描边的效果如下:
效果对比如下,描边的是我想要的效果:
Graphics2D.drawString输出文字如何实现字体描边的效果

代码如下:

g = img.createGraphics();
g.setBackground(Color.BLACK);
g.setColor(Color.WHITE);

if (this.font != null)
g.setFont(this.font);


 g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
g.drawString(content, this.x, this.y);
g.dispose();
求高手不吝赐教,多谢了,给您拜年了~~~!

4 个解决方案

#1


你需要的功能应该是 "string to shape"

Font 本身应该包含了矢量绘图的信息,所以应该可以,搜了一下找到下面这个,你可以试一下:

http://*.com/questions/2466233/java-swing-converting-a-text-string-to-a-shape

#2


@raistlic,你发的帖子是英文的看不懂,另外有没有“Font 本身应该包含了矢量绘图”相关的例子啊,我看Font构造方法就三个参数Font font = new Font("黑体", Font.PLAIN, 25);分别是字体,样式,和字号,没有你说的“矢量绘图”。

#3


引用 2 楼 thunderbird521 的回复:
你发的帖子是英文的看不懂


这话程序猿不能说,——看不懂,查词典。

而且那帖子里第一个回答就是代码示例,代码总能看懂吧,里面的代码稍微改一下就能看到效果:



import javax.swing.*;
import java.awt.*;
import java.awt.font.GlyphVector;

public class Test extends JComponent {

  public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {

      @Override
      public void run() {

        JFrame test = new JFrame("Test");

        test.setContentPane(new Test());
        test.pack();
        test.setLocationRelativeTo(null);
        test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        test.setVisible(true);
      }
    });
  }

  Test() {

    setPreferredSize(new Dimension(800, 600));
  }

  @Override
  protected void paintComponent(Graphics g) {

    Font f = new Font("Courier New", Font.BOLD, 140);
    GlyphVector v = f.createGlyphVector(getFontMetrics(f).getFontRenderContext(), "Hello");
    Shape shape = v.getOutline();

    Rectangle bounds = shape.getBounds();

    Graphics2D gg = (Graphics2D) g;
    gg.translate(
            (getWidth() - bounds.width) / 2 - bounds.x,
            (getHeight() - bounds.height) / 2 - bounds.y
    );
    gg.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    gg.setColor(Color.WHITE);
    gg.fill(shape);
    gg.setColor(Color.BLUE.darker().darker());
    gg.setStroke(new BasicStroke(3));
    gg.draw(shape);
  }
}


Graphics2D.drawString输出文字如何实现字体描边的效果

#4


终于有个明白人, 设置stroke画笔即可!
此乃所有图形与图像API的通用做法!
不知道只能怪你没做过UI渲染! 拍你一下,别介意!

#1


你需要的功能应该是 "string to shape"

Font 本身应该包含了矢量绘图的信息,所以应该可以,搜了一下找到下面这个,你可以试一下:

http://*.com/questions/2466233/java-swing-converting-a-text-string-to-a-shape

#2


@raistlic,你发的帖子是英文的看不懂,另外有没有“Font 本身应该包含了矢量绘图”相关的例子啊,我看Font构造方法就三个参数Font font = new Font("黑体", Font.PLAIN, 25);分别是字体,样式,和字号,没有你说的“矢量绘图”。

#3


引用 2 楼 thunderbird521 的回复:
你发的帖子是英文的看不懂


这话程序猿不能说,——看不懂,查词典。

而且那帖子里第一个回答就是代码示例,代码总能看懂吧,里面的代码稍微改一下就能看到效果:



import javax.swing.*;
import java.awt.*;
import java.awt.font.GlyphVector;

public class Test extends JComponent {

  public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {

      @Override
      public void run() {

        JFrame test = new JFrame("Test");

        test.setContentPane(new Test());
        test.pack();
        test.setLocationRelativeTo(null);
        test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        test.setVisible(true);
      }
    });
  }

  Test() {

    setPreferredSize(new Dimension(800, 600));
  }

  @Override
  protected void paintComponent(Graphics g) {

    Font f = new Font("Courier New", Font.BOLD, 140);
    GlyphVector v = f.createGlyphVector(getFontMetrics(f).getFontRenderContext(), "Hello");
    Shape shape = v.getOutline();

    Rectangle bounds = shape.getBounds();

    Graphics2D gg = (Graphics2D) g;
    gg.translate(
            (getWidth() - bounds.width) / 2 - bounds.x,
            (getHeight() - bounds.height) / 2 - bounds.y
    );
    gg.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    gg.setColor(Color.WHITE);
    gg.fill(shape);
    gg.setColor(Color.BLUE.darker().darker());
    gg.setStroke(new BasicStroke(3));
    gg.draw(shape);
  }
}


Graphics2D.drawString输出文字如何实现字体描边的效果

#4


终于有个明白人, 设置stroke画笔即可!
此乃所有图形与图像API的通用做法!
不知道只能怪你没做过UI渲染! 拍你一下,别介意!