Визуализация шрифта с информацией о глифе

Я вызываю GetCharABCWidthsFloatW, чтобы получить информацию о ширине символа. С этим я получу левый подшипник, правый подшипник и увеличенную ширину.

Для позиционирования каждого символа я начну с переменных «xPlacement», которые будут начинаться с нуля. Сначала я отрегулирую переменную xPlacement, вычтя «левый подшипник». После того, как персонаж нарисован, я продвигаю его на ширину символа (позже я покажу расчет для этого). Затем я переместу переменную xPlacement, добавив информацию о «правом подшипнике» из текущего «xPlacement».

На мой взгляд, это все, что должно быть кодом для размещения символов, верно?

Важно исправить ширину символов. Ширина будет рассчитана путем взятия расширенной ширины плюс ПОЛОЖИТЕЛЬНАЯ версия левого подшипника и ПОЛОЖИТЕЛЬНАЯ версия правого подшипника. Я конвертирую эти значения в положительные, если они отрицательные, чтобы получить полную ширину символа.

Вот псевдокод о том, как он генерируется.

float xPlacement = 0.0f;
for(int i = 0; i < strlen(text); ++i)
{
 char charValue = text[i];
 GetCharWidthABC(.., .., charInfo);

 float posLeft = charInfo.leftSideBearing;
 if(charInfo.leftSideBearing < 0)
  posLeft = -charInfo.leftSideBearing;

 float posRight = charInfo.rightSideBearing;
 if(posRight < 0)
  posRight = -charInfo.rightSideBearing;

 float posWidth = posRight + posRight + charInfo.advancedWidth;

 float letterWidth = posWidth;

 xPlacement  -= charInfo.leftSideBearing;

 /* generated some vertex coordinates, using the xPlacement variable and letterWidth */

 xPlacement += letterWidth;
 xPlacement += charInfo.rightSideBearing
}

Кажется, это правильный способ сделать это?

6
задан Josh Lee 24 December 2010 в 21:26
поделиться