我試圖在Graphics2D渲染上創建Punch Out效果。使用Graphics2D實現「打孔」文本
我有一個黑色的長方形。文本顏色紅色。我希望能夠將顏色設置爲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);
我看到的是文字對背景完全透明,但沒有打孔。
我看到的:
我期望看到:
如何使用的Graphics2D我實現了 '衝出' 的效果?
編輯:Punch-Out效果就像使用JLabel的前景設置爲0x00FF0000,並且返回地面0xFF000000。它從背後「切出」/「衝出」文字。我也不希望它總是打出來,只有當alpha是0時。
EDIT2:我試過了以下相同結果的代碼。
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);
你如何使用Path2D這樣呢?它的抽象爲Java 7u11 – meriley
看起來像你需要Path2D.double(形狀) – meriley
而且它看起來即使這個實現我得到相同的確切結果。 – meriley