2012-03-06 19 views
1

문자열/문자를 Java (Graphics2D)로 축척하여 지정된 크기의 사각형에 정확히 맞 춥니 다. (즉, 내부)?자바에서 문자열을 내부의 사각형에 맞 춥니 다

String s = "S"; // always a single character! 
Rectangle rect = getRect(); // defines the desired size and position 
AffineTransform transform = new AffineTransform(); 
transform.setToTranslation(rect.getX(), rect.getY()); 
transform.scale(rect.getWidth()/(double) fm.stringWidth(s), 
       rect.getHeight()/(double) fm.getAscent()); 
FontRenderContext frc = image.getFontRenderContext(); 
TextLayout tl = new TextLayout(s, g2d.getFont(), frc); 
Shape shape = tl.getOutline(transform); 
g2d.setClip(shape); 
g2d.fill(shape.getBounds()); 

문제이 코드를 실행 한 것은 문자열이 사각형이 약의 크기에 맞게 조절되어 있지만, 그것은 정확하게 맞지 않는, 즉 :

내가 지금까지 무엇을 가지고 . 그것은 내부에서 직사각형 경계를 만지지 않습니다 (그것은 내가하고 싶은 것입니다!).

다른 글꼴을 사용하는 데 도움이됩니까? 나는 지금 monospace-font를 사용하고있다. 아니면 스케일링을 다르게해야합니까?

도움 주셔서 감사합니다.

+0

왜 Swing과 같은 그래픽 프레임 워크를 사용하지 않습니까? –

+0

난 그냥 웹 응용 프로그램에 대한 이미지를 그리기입니다. 당신이 스윙을 사용하여 쉽게 해결책을 알고 계십니까? – Tobieh

+0

죄송합니다. 질문을 자세히 읽지 않았습니다. 상자의 모서리에 정확히 닿으려면 개별 문자 간격으로 놀아야 만 할 것입니다. –

답변

3

나는 내가하고 싶은 것을 할 수있는 방법을 생각하고, 나는 그것을 공유 할 수 생각 : 내 주요 문제는, 내가, 그래서 대신에 글꼴의 상승을 사용하는 다른 문자의 높이를 사용

의 outline의 최대 및 최소 Y 좌표로 높이를 계산합니다. 아래를 참조하십시오.

String s = "S"; // always a single character! 
Rectangle rect = getRect(); // defines the desired size and position 
FontMetrics fm = g2d.getFontMetrics(); 
FontRenderContext frc = g2d.getFontRenderContext(); 
TextLayout tl = new TextLayout(s, g2d.getFont(), frc); 
AffineTransform transform = new AffineTransform(); 
transform.setToTranslation(rect.getX(), rect.getY()); 
double scaleY = 
    rect.getHeight()/(double) (tl.getOutline(null).getBounds().getMaxY() 
           - tl.getOutline(null).getBounds().getMinY()); 
transform.scale(rect.getWidth()/(double) fm.stringWidth(s), scaleY); 
Shape shape = tl.getOutline(transform); 
g2d.setClip(shape); 
g2d.fill(shape.getBounds()); 

비슷한 문제가있는 사용자를 돕기를 바랍니다.

관련 문제