gpt4 book ai didi

java - 使用 Graphics2D 实现 "punch out"文本

转载 作者:行者123 更新时间:2023-11-30 09:27:46 28 4
gpt4 key购买 nike

我正在尝试在 Graphics2D 渲染器上创建 Punch Out 效果。

我有一个黑色的矩形。文本颜色为红色。我希望能够将颜色设置为 0x00FF0000 并让它从背景中“冲出”。

    Graphics2D newG = (Graphics2D)g.create();
newG.setColor(new Color(0x00,0x00,0x00,0xFF)); //255 Alpha
newG.fillRect(box.x, box.y, box.width, box.height);

newG.setColor(new Color(0xFF,0x00,0x00,0x00)); //0 Alpha
newG.drawString("Welcome", box.x ,box.y);

我看到的是文本相对于背景完全透明,但没有突出。

我看到的:http://i.imgur.com/HYTe1.jpg

我希望看到的:http://i.imgur.com/YQwZk.jpg

如何使用 Graphics2D 实现“打洞”效果?

编辑:打洞效果就像使用前景设置为 0x00FF0000 和背景设置为 0xFF000000 的 JLabel。它从背景中“切出”/“打出”文本。我也不希望它总是打出来,只有当 alpha 为 0 时。

EDIT2:我尝试了下面的 sugested 代码,结果相同。

Rectangle stringBox = new Rectangle(x, y - fm.getHeight() + fm.getDescent(), fm.stringWidth(splitStr[i]), fm.getHeight());

TextLayout textLO = new TextLayout(splitStr[i], newG.getFont(), newG.getFontRenderContext());
Shape sText = textLO.getOutline(newG.getTransform()); // The Shape of text
Path2D.Double shape = new Path2D.Double(stringBox); // The rectangle
appendTextShape(shape, sText, newG.getTransform(), 0, 10);
newG.setColor(Color.black);
newG.fill(shape);
newG.setColor(new Color(0xFF, 0x00,0x00,0x00));
newG.drawString(splitStr[i], x, y);

最佳答案

http://docs.oracle.com/javase/tutorial/2d/advanced/compositing.html

正确设置组合是解决方案。 SRC_IN 是我要找的组合。

关于java - 使用 Graphics2D 实现 "punch out"文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14385751/

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