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是相互排斥的。)

标志 含义
FO_CFF Postscript OpenType 字体。
FO_DBCS_FONT Font 支持 DBCS 代码页。
FO_EM_HEIGHT TrueType 驱动程序内部标志。
FO_GRAY16 字体位图是每像素 4 位混合 (alpha) 值。
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 结构的形式返回,则驱动程序必须检查关联 IFIMETRICS 结构的 flInfo 成员的 FM_INFO_TECH_STROKE 标志。 如果设置了该标志,则应对路径进行笔划,否则必须使用交替模式约定填充路径。

如果设置了FO_GRAY16标志,则字体位图是每像素 4 位混合 (alpha) 值。 值为零意味着生成的像素应具有与背景相同的颜色。 如果 alpha 值为 k,则下表使用线性 alpha 混合或伽玛校正 alpha 混合来描述生成的像素的属性。 在这两种方法中,前景色和背景色分别为 cf 和 cb

像素属性 说明
混合颜色
(线性 alpha 混合)
线性 alpha 混合生成混合颜色,该混合颜色是前景色和背景色的线性组合。

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

混合分数 b 的获取方式如下:

b = k / 15,对于 k = 0, 1, 2, ..., 15

注意:前景色和背景色包括 R、G、B) (所有三个颜色通道。

混合颜色
(伽玛修正的 alpha 混合)
伽玛校正的 alpha 混合通过将依赖于 alpha 值的变量提高到固定幂来生成混合颜色。

提供了两个公式:当前景色在数字上大于背景色时,应使用一个公式:相反,应使用另一个。 (当前景色和背景色相等时,这两个公式简化为 c = cb.)

如果 cf> cb
c = cb + pow (b[k], (1 / gamma) ) * (cf - cb)
如果 cf< cb
c = cb + (1 - pow (1 - b[k], 1 / gamma) ) * (cf - cb)

在这些公式中,gamma = 2.33 和 b[k] 是第 k 混合分数,获取如下:

b[k] = 0,对于 k = 0,并且
b[k] = (k + 1) / 16,对于 k = 1, 2, ..., 15

注意:与线性 alpha 混合不同,这些公式 必须应用于 R 、G、B) 三个颜色通道 (。

 

当 GDI 请求将字体灰度设置为 16 个值之一时,在 DrvQueryFontData 函数的条目上设置FO_GRAY16标志。 如果字体驱动程序无法将特定字体实现灰度,则字体提供程序会清除FO_GRAY16标志并设置FO_NOGRAY16标志,以通知 GDI 无法满足灰度缩放请求。

iTTUniq

指定关联的 TrueType 文件。 TrueType 字体面的两个单独的点大小实现将具有 FONTOBJ 结构,这些结构共享相同的 iTTUniq 值,但具有不同的 iUniq 值。 只有 TrueType 字体类型可以具有非零 iTTUniq 成员。 有关详细信息,请参阅 flFontType

iFile

指向已加载的设备字体的驱动程序定义的值的指针。 如果字体是 GDI 字体,则此成员在内部用于标识字体,应忽略。

sizLogResPpi

指定实现此字体的设备分辨率。

ulStyleSize

指定字体实例的样式大小(以磅为单位)。

pvConsumer

指向与此字体实例关联的使用者分配数据的指针。 使用者是接受字形信息作为输入以生成文本输出的驱动程序。 只有字体使用者可以修改此成员。 此字体的使用者可以将任何信息存储在此成员指向的位置。 引擎不会修改此成员。 首次将 FONTOBJ 结构传递给使用者时, pvConsumer 成员保证为 null。

pvProducer

指向与此字体实例关联的生成者分配的数据的指针。 生成者是可将字形信息生成为输出的驱动程序;这包括字形指标、位图和轮廓。 只有字体生成者才能修改此成员。 此字体的生成者可以将任何信息存储在此成员指向的位置。 引擎不会修改此成员。 首次将 FONTOBJ 结构传递给生成者时, pvProducer 成员保证为 null。

注解

作为加速器,允许驱动程序访问 FONTOBJ 结构的公共成员。

驱动程序可以是生成者和使用者。 例如,打印机驱动程序可以充当生成者,同时处理对驱动程序提供的 DrvQueryFontData 函数的调用以提供字形指标,稍后在处理对驱动程序提供的 DrvTextOut 函数的调用时充当使用者。

要求

要求
Header winddi.h (包括 Winddi.h)

另请参阅

DrvDestroyFont

DrvGetGlyphMode

DrvQueryFont

DrvQueryTrueTypeOutline

FONTOBJ_cGetAllGlyphHandles

FONTOBJ_cGetGlyphs

FONTOBJ_pifi

FONTOBJ_pxoGetXform

FONTOBJ_vGetInfo

IFIMETRICS