You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java Graphics2D中绘制可描摹的实心数字3?

实现描红本式实心可描摹数字的Graphics2D修改方案

你的代码当前生成的是虚线轮廓的空心数字,原因是你对数字的轮廓Shape做了虚线描边后再填充,最终得到的是虚线构成的空心区域。要实现描红本那种「实心数字底色+虚线描摹轨迹」的效果,需要调整绘制逻辑:先画实心数字作为底,再在数字的笔画路径上绘制虚线。

修改后的代码示例

float[] textDash = {15.0f};
g2d.setFont(g2d.getFont().deriveFont(400f));
String numberString = "3";

// 获取数字的字形轮廓
FontRenderContext frc = g2d.getFontRenderContext();
GlyphVector gv = g2d.getFont().createGlyphVector(frc, numberString);
Shape numberShape = gv.getOutline();

// 平移到目标位置
AffineTransform at = AffineTransform.getTranslateInstance(30, 200);
numberShape = at.createTransformedShape(numberShape);

// 1. 绘制实心数字作为底色(用浅灰色模拟描红本的淡底色)
g2d.setColor(Color.LIGHT_GRAY);
g2d.fill(numberShape);

// 2. 创建虚线笔触,绘制数字的轮廓虚线(黑色作为描摹轨迹)
BasicStroke dashedStroke = new BasicStroke(5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, textDash, 0.0f);
g2d.setColor(Color.BLACK);
g2d.setStroke(dashedStroke);
g2d.draw(numberShape);

关键修改点说明

  • 移除了dashedStroke.createStrokedShape(numberStringOutline)步骤:原来的逻辑是把轮廓转成虚线形状再填充,得到空心虚线效果;现在直接用虚线笔触绘制原始数字轮廓Shape。
  • 新增实心底色绘制:先填充数字Shape形成实心底,再叠加虚线描边,完全还原描红本的样式——孩子可以沿着黑色虚线描摹,底色的实心数字起到参照作用。

内容的提问来源于stack exchange,提问作者Quillion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 02:55:13