【发布时间】:2021-08-09 00:20:01
【问题描述】:
我正在尝试在圆角矩形顶部呈现文本,但我希望剪切掉文本下方的圆角矩形部分。这是我想要的样子:
问题是我找不到任何简单的方法来做到这一点。我尝试使用 clearRect,但这只会创建一个黑色矩形,我想在下面有一个图像(现在它只是白色的)。
然后我想到也许我可以用白色填充我想要删除的矩形区域,然后过滤掉所有的白色像素。这并没有像我希望的那样工作,因为仍然有白色像素:
这是我目前拥有的代码:
public static void createRoundedRectImg(int width, int height)
{
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics g = img.getGraphics();
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g.setColor(Color.WHITE);
g.fillRect(0, 0, width, height);
int padding = 50;
g.setColor(Color.BLUE);
g.drawRoundRect(padding, padding, width - (padding * 2), height - (padding * 2), 50, 50);
float textSize = 84f;
Font font = g.getFont().deriveFont(textSize).deriveFont(Font.BOLD);
g.setFont(font);
String text = "TEXT";
Rectangle2D stringBounds = g.getFontMetrics(font).getStringBounds(text, g);
int textWidth = (int) stringBounds.getWidth();
int textHeight = (int) (stringBounds.getHeight() + g.getFontMetrics(font).getDescent());
int textX = (width / 2) - (textWidth / 2);
int textY = g.getFontMetrics(font).getDescent() * 2 + padding;
//g.clearRect(textX, textY - textHeight, textWidth, textHeight);
g.setColor(Color.WHITE);
g.fillRect(textX, textY - textHeight, textWidth, textHeight);
g.setColor(Color.GREEN);
g.drawString(text, textX, textY);
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
Color c = new Color(img.getRGB(x, y));
if (c.getRGB() == Color.WHITE.getRGB())
img.setRGB(x, y, new Color(0, 0, 0, 255).getRGB());
}
}
g.dispose();
}
有没有更简单的方法来清除文本下方的圆角矩形部分?完成后,我想将整个内容覆盖在图像之上,所以我需要背景是透明的。
【问题讨论】:
-
使用
drawRect可能会为您做到这一点? -
是的,正如@g00se 提到的,尝试在文本下方绘制一个没有边框的填充矩形
-
是的,但是我想让文字下面的部分是透明的,这样你就可以看到下面的图像了。