В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

Как собственный формат буфера GetGlyphOutline()

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:87115
Заявление об отказе относительно содержимого статьи о продуктах, поддержка которых прекращена
Эта статья содержит сведения о продуктах, поддержка которых корпорацией Майкрософт прекращена. Поэтому она предлагается как есть и обновляться не будет.
Аннотация
В GetGlyphOutline функция предоставляет метод для приложенияполучить о низком уровне глифов в TrueTypeсреда. В данной статье описывается формат данныхGetGlyphOutline функция возвращает.
Дополнительная информация
Глиф структуры представляет собой набор контуров, описывающие глиф. КаждыйПрофиль загрузки определяется TTPOLYGONHEADER Структура данных, которая являетсяследуют столько TTPOLYCURVE структуры данных, необходимые дляОписание профиля.

Описывается каждое положение POINTFX данные структуры,представляет абсолютное положение, не относительное положение. Даты началаи конечную точку для данного глиф pfxStart член TTPOLYGONHEADER Структура данных.

В TTPOLYCURVE структуры данных делятся на два типа: TT_PRIM_LINEзапись или запись TT_PRIM_QSPLINE. Запись TT_PRIM_LINE представляет собой сериюточек; линий между точками описывают контурглиф. TT_PRIM_QSPLINE запись — это последовательность из точки, определяющиеквадратичных сплайнов (q сплайны), необходимые для описания структурысимвол.

В TrueType, сплайн q определяется три точки (A, B и C)где точек a и c находятся на кривой и точки b отключен от кривой.Уравнение для каждого сплайна q является следующим образом (представляющий xAКоордината x точки A, интересными представляет координату по оси y точки aи т. д.)
   x(t) = (xA-2xB+xC)*t^2 + (2xB-2xA)*t + xA   y(t) = (yA-2yB+yC)*t^2 + (2yB-2yA)*t + yA				
где t варьируется от 0,0 до 1,0.

Формат записи TT_PRIM_QSPLINE выглядит следующим образом:
  • A точку на кривую q является (либо pfxStart в текущей позиции TTPOLYGONHEADER, отправной точкой для TTPOLYCURVE, или Конечная точка предыдущей TTPOLYCURVE).
  • B точки является текущей записи.
  • C точки выглядит следующим образом:
    • Если запись имеет два или более точек, после точки b пункт c является средней точки между точки b и далее точки запись.
    • В противном случае c точка является точкой, после точки б.
Следующий код представляет алгоритм, используемый для процессаЗапись TT_PRIM_QSPLINE. Хотя этот код демонстрирует извлечениеq сплайны с TT_PRIM_QSPLINE записи, он не подходит для использованияв приложении.
   pfxA = pfxStart;                // Starting point for this polygon   for (u = 0; u < cpfx - 1; u++)  // Walk through points in spline   {   pfxB = apfx[u];              // B is always the current point   if (u < cpfx - 2)            // If not on last spline, compute C      {      pfxC.x = (pfxB.x + apfx[u+1].x) / 2;  // x midpoint      pfxC.y = (pfxB.y + apfx[u+1].y) / 2;  // y midpoint      }   else                         // Else, next point is C      pfxC = apfx[u+1];                                // Draw q-spline   DrawQSpline(hdc, pfxA, pfxB, pfxC);   pfxA = pfxC;                 // Update current point   }				
Выше алгоритма управляет точки непосредственно, с плавающей запятойоператоры. Тем не менее точки сплайна q записей хранятся в фиксированныйТип данных. Следующий код демонстрирует управление фиксированныйэлементы данных:
   FIXED fx;   long *pl = (long *)&fx;   // Perform all arithmetic on *pl rather than on fx   *pl = *pl / 2;				
Следующая функция преобразует число с плавающей запятой в фиксированныйпредставление:
   FIXED FixedFromDouble(double d)   {   long l;   l = (long) (d * 65536L);   return *(FIXED *)&amp;l;   }				
В реальном приложении, а не письма DrawQSpline функции для рисования каждого сплайна q по отдельности, более эффективнымРасчет точки на кривой q и хранить их в массив ТОЧКАструктуры данных. После выполнения расчетов для глифов, передачаТОЧКИ массива PolyPolygon функции для рисования и заполненияглиф.

Следующий пример представляет данные, возвращенныеGetGlyphOutline для строчные буквы «j» глифов в шрифте Arial 24 точки8514/a (мелкий шрифт) видео драйвер:
   GetGlyphOutline GGO_NATIVE 'j'   dwrc            = 208      // Total native buffer size in bytes   gmBlackBoxX, Y  = 6, 29    // Dimensions of black part of glyph   gmptGlyphOrigin = -1, 23   // Lower-left corner of glyph   gmCellIncX, Y   = 7, 0     // Vector to next glyph origin   TTPOLYGONHEADER #1           // Contour for dot on "j"   cb       = 44              // Total size of dot polygon   dwType   = 24              // TT_POLYGON_TYPE   pfxStart = 2.000, 20.000   // Start at lower-left corner of dot   TTPOLYCURVE #1   wType  = TT_PRIM_LINE   cpfx   = 3   pfx[0] = 2.000, 23.000   pfx[1] = 5.000, 23.000   pfx[2] = 5.000, 20.000   // Automatically close to pfxStart   TTPOLYGONHEADER #2   // Contour for body of "j"   cb       = 164     // Total size is 164 bytes   dwType   = 24      // TT_POLYGON_TYPE   pfxStart = -1.469, -5.641   TTPOLYCURVE #1     // Finish flat bottom end of "j"   wType  = TT_PRIM_LINE   cpfx   = 1   pfx[0] = -0.828, -2.813   TTPOLYCURVE #2    // Make hook in "j" with spline                    // Point A in spline is end of TTPOLYCURVE #1    wType  = TT_PRIM_QSPLINE    cpfx   = 2               // two points in spline -> one curve    pfx[0] = -0.047, -3.000  // This is point B in spline    pfx[1] = 0.406, -3.000   // Last point is always point C   TTPOLYCURVE #3    // Finish hook in "j"                    // Point A in spline is end of TTPOLYCURVE #2   wType  = TT_PRIM_QSPLINE   cpfx   = 3               // Three points -> two splines   pfx[0] = 1.219, -3.000   // Point B for first spline                             // Point C is (pfx[0] + pfx[1]) / 2   pfx[1] = 2.000, -1.906   // Point B for second spline   pfx[2] = 2.000, 0.281    // Point C for second spline   TTPOLYCURVE #4    // Majority of "j" outlined by this polyline    wType  = TT_PRIM_LINE    cpfx   = 3    pfx[0] = 2.000, 17.000    pfx[1] = 5.000, 17.000    pfx[2] = 5.000, -0.250   TTPOLYCURVE #5    // start of bottom of hook    wType  = TT_PRIM_QSPLINE    cpfx   = 2               // One spline in this polycurve    pfx[0] = 5.000, -3.266   // Point B for spline    pfx[1] = 4.188, -4.453   // Point C for spline   TTPOLYCURVE #6    // Middle of bottom of hook    wType  = TT_PRIM_QSPLINE    cpfx   = 2               // One spline in this polycurve    pfx[0] = 3.156, -6.000   // B for spline    pfx[1] = 0.766, -6.000   // C for spline   TTPOLYCURVE #7    // Finish bottom of hook and glyph    wType  = TT_PRIM_QSPLINE    cpfx   = 2               // One spline in this polycurve    pfx[0] = -0.391, -6.000  // B for spline    pfx[1] = -1.469, -5.641  // C for spline				

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 87115 — последний просмотр: 06/01/2011 09:01:00 — редакция: 4.0

Microsoft Windows Software Development Kit 3.1, Microsoft Win32 Application Programming Interface

  • kbhowto kbmt KB87115 KbMtru
Отзывы и предложения