2011-01-03 2 views
5

문자로 구성된 도형에 조명 효과를 추가하려면 문자를 한 줄씩 그립니다.문자로 문자를 그릴 때 커닝 문제가 발생합니다.

while (i != line.length()) { 
c = line.substring(i, i + 1); 

cWidth = g.getFontMetrics().stringWidth(c); 

g.drawString(c, xx += cWidth, yy); 
i++; 
} 

문제는 문자의 폭은 두 문자 문자열로 인쇄 될 때 다른 캐릭터로부터 그려 실제 거리 아니된다. graphics2d에서 올바른 거리를 얻을 수있는 방법이 있습니까?

답변

0

정확하게 문제를 이해할 수 있을지 잘 모르겠습니다. 그러나, 나는 당신의 코드를 테스트하고 실제로 일부 문자열 문자가 서로 겹쳐있다.

xx 값을 증가시키는 방식으로 문제가 발생했습니다 (문자를 그리기 전에 증가 시켰습니다).

public void myDrawString(Graphics g, String line, int xx, int yy) { 
    int i = 0; 
    while (i != line.length()) { 
     String c = line.substring(i, i + 1); 
     int cWidth = g.getFontMetrics().stringWidth(c); 
     g.drawString(c, xx, yy); 
     xx += cWidth; 
     //xx += 2; 
     i++; 
    } 
} 

의 주석과 문자 사이의 공간을 증가 xx += 2 라인을 조정 : 여기

는 코드의 버전을 수정합니다.

0

커닝은 문자 간격이 인 커닝을 정의하고 char-by-char 문자열을 반복하면 커닝 시스템에 어떤 기회도 주어지지 않습니다. -width font를 사용하거나 조명 효과를 재 작업하여 단일 문자 대신 전체 문자열로 작업 할 수 있습니다.

2

Lukas Baran의 답변으로 인해 출력이 나빠 보이게하는 주요 문제가 해결되었습니다. 그러나 이런 방식으로 커닝을 재현 할 수없는 미묘한 문제가 남아 있습니다. 문제의 정도는 사용중인 글꼴에 따라 다를 수 있습니다. 커닝 권리를 얻으려면, 당신도 이런 식으로 뭔가를 할 수 : 커닝이 배치 한 것이다 각 문자를 배치해야

while (i != line.length()) { 
    String c = line.substring(i, i + 1); 
    String d = line.substring(0, i + 1); 
    int cWidth = g.getFontMetrics().stringWidth(c); 
    int dWidth = g.getFontMetrics().stringWidth(d); 
    g.drawString(c, xx + dWidth - cWidth, yy); 
    i++; 
} 

.

관련 문제