Graphics2D 렌더링에서 펀치 아웃 효과를 만들려고합니다.Graphics2D를 사용하여 "펀치 아웃"텍스트 구현
나는 검은 색 사각형을 가지고 있습니다. 텍스트가 빨간색으로 표시됩니다. 색상을 0x00FF0000으로 설정하고 뒷 배경에서 "펀치 아웃 (punch out)"할 수 있기를 원합니다.
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를 사용하여 '펀치 아웃'효과를 얻을 수 있습니다 : 내가 볼 것으로 예상 무엇
?
편집 : 펀치 아웃 효과는 전경이 0x00FF0000으로 설정되고 뒷 배경이 0xFF000000 인 JLabel을 사용하는 것과 같습니다. 그것은 뒤쪽에서 텍스트를 "잘라냅니다"/ "펀치 아웃"합니다. 또한 항상 알파가 0 일 때만 펀치 아웃하는 것을 원하지 않습니다.
EDIT2 : Ive는 아래의 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);
이 어떻게 그런 클래스 Path2D을 사용하고 있습니다 :
그러나, 이미이 같은
Path2D
의 consrtuctor에서 구현? Java 7u11에 대한 요약 – merileyPath2D.double (Shape)이 필요합니다. – meriley
또한이 구현에서도 동일한 결과가 나타납니다. – meriley