Поделиться через


Структура FONTOBJ (winddi.h)

Структура FONTOBJ используется для предоставления драйверу доступа к сведениям о конкретном экземпляре шрифта.

Синтаксис

typedef struct _FONTOBJ {
  ULONG     iUniq;
  ULONG     iFace;
  ULONG     cxMax;
  FLONG     flFontType;
  ULONG_PTR iTTUniq;
  ULONG_PTR iFile;
  SIZE      sizLogResPpi;
  ULONG     ulStyleSize;
  PVOID     pvConsumer;
  PVOID     pvProducer;
} FONTOBJ;

Члены

iUniq

Задает отдельную реализацию шрифта. Это значение может использоваться драйвером для определения шрифта GDI, который он мог кэшировать, или для определения реализации драйвером собственного шрифта. Если этот элемент равен нулю для шрифта GDI, он не должен кэшироваться.

iFace

Указывает индекс устройства для шрифта устройства, зарегистрированного при вызове DrvQueryFont. Если шрифт является шрифтом GDI, этот элемент имеет значение только для GDI, и драйвер должен игнорировать его.

cxMax

Задает ширину (в пикселях) самого большого глифа в указанном шрифте.

flFontType

Значение, указывающее тип шрифта. Этот элемент может быть сочетанием флагов, перечисленных в следующей таблице. (Обратите внимание, что FO_GRAY16 и FO_NOGRAY16 являются взаимоисключающими.)

Flag Значение
FO_CFF Шрифт Postscript OpenType.
FO_DBCS_FONT Шрифт поддерживает кодовую страницу DBCS.
FO_EM_HEIGHT Внутренний флаг драйвера TrueType.
FO_GRAY16 Точечные рисунки шрифта представляют собой значения альфа-наложения четырех битов на пиксель.
FO_MULTIPLEMASTER Несколько основных шрифтов (Type1 или OpenType).
FO_NOGRAY16 Указывает, что драйвер шрифта не может (или не будет) использовать оттенки серого для определенной реализации шрифта.
FO_POSTSCRIPT Шрифт Postscript (Type1 или OpenType).
FO_SIM_BOLD Полужирный шрифт, смоделированный драйвером.
FO_SIM_ITALIC Смоделированный драйвером курсив.
FO_TYPE_DEVICE Шрифт для конкретного устройства.
FO_TYPE_OPENTYPE Шрифт OpenType.
FO_TYPE_RASTER Точечный шрифт.
FO_TYPE_TRUETYPE Шрифт TrueType.
FO_VERT_FACE Вертикальный шрифт.
 

Если установлен флаг FO_RASTER, глифы, записанные в указанную структуру STROBJ, являются растровыми изображениями, в противном случае они являются указателями на структуры PATHOBJ. Если изображения глифов возвращаются в виде структур PATHOBJ, драйвер должен проверить флаг FM_INFO_TECH_STROKE элемента flInfo связанной структуры IFIMETRICS . Если этот флаг установлен, пути следует обводить, в противном случае пути должны быть заполнены с помощью соглашения о режиме чередования.

Если установлен флаг FO_GRAY16, то растровые изображения шрифта представляют собой четыре бита на пиксель (альфа-значения). Нулевое значение означает, что результирующий пиксель должен иметь тот же цвет, что и фон. Если альфа-значение равно k, то в следующей таблице описаны атрибуты результирующего пикселя с использованием линейного альфа-смешения или гамма-исправленного альфа-смешения. В обоих методах цветами переднего плана и фона являются соответственно cf и cb.

Атрибут пикселя Описание
Смешанный цвет
(линейное альфа-смешение)
Линейное альфа-смешивание создает смешанный цвет, представляющий собой линейное сочетание цветов переднего плана и фона.

c = b * cf + (1 - b) * cb

Доля смеси, b, получается следующим образом:

b = k / 15, для k = 0, 1, 2, ..., 15

Примечание. Цвета переднего плана и фона включают все три цветовых канала (R, G, B).

Смешанный цвет
(альфа-смешение с гамма-исправлением)
Гамма-исправленное альфа-смешение создает смешанный цвет путем повышения переменной, которая зависит от альфа-значения до фиксированной мощности.

Приведены две формулы: одна должна использоваться, если цвет переднего плана численно превышает цвет фона; другой следует использовать в обратном случае. (Если цвета переднего плана и фона равны, обе формулы упрощаются до c = cb.)

Если cf> cb,
c = cb + pow(b[k], (1 / гамма)) * (cf - cb)
Если cf< cb,
c = cb + (1 - pow(1 - b[k], 1 / гамма)) * (cf - cb)

В этих формулах гамма = 2,33, а b[k] — этоk-я доля смешения, полученная следующим образом:

b[k] = 0, для k = 0, и
b[k] = (k + 1) / 16, для k = 1, 2, ..., 15

Примечание. В отличие от линейного альфа-смешивания эти формулы должны применяться к каждому из трех цветовых каналов (R, G, B).

 

GDI устанавливает флаг FO_GRAY16 при входе в функцию DrvQueryFontData , когда запрашивает одно из 16 значений шрифта серого. Если драйвер шрифта не может изменить оттенки серого для определенной реализации шрифта, поставщик шрифтов снимает флаг FO_GRAY16 и устанавливает флаг FO_NOGRAY16, чтобы сообщить GDI о том, что запрос на масштабирование серого не будет удовлетворен.

iTTUniq

Указывает связанный файл TrueType. Две реализации размера отдельных точек шрифта TrueType будут иметь структуры FONTOBJ, которые используют одно и то же значение iTTUniq , но будут иметь разные значения iUniq . Только типы шрифтов TrueType могут иметь ненулевой элемент iTTUniq . Дополнительные сведения см. в разделе flFontType.

iFile

Указатель на определенное драйвером значение для уже загруженных шрифтов устройств. Если шрифт является шрифтом GDI, то этот элемент используется внутри организации для идентификации шрифта и должен игнорироваться.

sizLogResPpi

Указывает разрешение устройства, для которого реализован этот шрифт.

ulStyleSize

Задает размер стиля экземпляра шрифта в пунктах.

pvConsumer

Указатель на данные, выделенные потребителем, связанные с этим экземпляром шрифта. Потребитель — это драйвер, который принимает сведения о глифах в качестве входных данных для создания выходных данных текста. Изменить этот элемент может только потребитель шрифта. Потребитель этого шрифта может хранить любую информацию в расположении, на которое указывает данный элемент. Подсистема не будет изменять этот элемент. Элемент pvConsumer гарантированно будет иметь значение NULL при первой передаче структуры FONTOBJ потребителю.

pvProducer

Указатель на данные, выделенные производителем, связанные с этим экземпляром шрифта. Производитель — это драйвер, который может создавать сведения о глифах в качестве выходных данных; к ним относятся метрики глифов, растровые изображения и контуры. Изменять этот элемент может только производитель шрифта. Производитель этого шрифта может хранить любую информацию в расположении, на которое указывает данный элемент. Подсистема не будет изменять этот элемент. Элемент pvProducer гарантированно будет иметь значение NULL при первой передаче структуры FONTOBJ производителю.

Комментарии

В качестве ускорителя драйверу разрешен доступ к открытым членам структуры FONTOBJ.

Драйвер может быть как производителем, так и потребителем. Например, драйвер принтера может выступать в качестве производителя при обработке вызова предоставленной драйвером функции DrvQueryFontData для предоставления метрик глифа, а затем выполнять роль потребителя при обработке вызова функции DrvTextOut , предоставленной драйвером.

Требования

Требование Значение
Заголовок winddi.h (включая Winddi.h)

См. также раздел

DrvDefont

DrvGetGlyphMode

DrvQueryFont

DrvQueryTrueTypeOutline

FONTOBJ_cGetAllGlyphHandles

FONTOBJ_cGetGlyphs

FONTOBJ_pifi

FONTOBJ_pxoGetXform

FONTOBJ_vGetInfo

IFIMETRICS