将LogFont高度转换为以磅为单位的字体大小

Bha*_*rat 5 delphi fonts font-size delphi-2007

我有一个LOGFONT结构.现在我要做的就是从LOGFONT高度获得相关的字体大小.

Rob*_*edy 12

当映射模式mm_Text(通常是)时,当lfHeight字段为正时,它已经以点为单位给出了高度.当它为负数时,单位为像素.LogFont的MSDN为您提供了在它们之间进行转换的公式:

lfHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
Run Code Online (Sandbox Code Playgroud)

每英寸有72个点.GetDeviceCaps告诉你给定设备上每英寸的像素数.反转公式以从点获取像素:

PointSize := MulDiv(-lfHeight, 72, GetDeviceCaps(hDC, LogPixelsY);
Run Code Online (Sandbox Code Playgroud)

这里要认识到的重要一点是你需要一个设备上下文.字体大小不会独立于它们出现的媒体而存在.屏幕上字体的像素高度将与打印机上字体的像素高度不同.使用Handle您计划绘制的任何画布的属性.

  • >"当lfHeight字段为正时" - 然后字体映射器提供单元格高度的匹配,即字符高度+内部前导.要获得点大小,必须从(单元格)高度中减去内部前导并按上述方式继续. (3认同)
  • 我认为我的第一个评论有点含糊不清,有些误导.如果说,模糊不会; "lfHeight"总是以像素为单位,唯一的区别是当它为正时它是完整的单元格高度,而当为负时它的绝对值是字符高度.如果说的话就会产生误导; 由于LOGFONT结构没有"内部前导"信息,因此无法用正lfHeight计算点大小.必须选择DC的字体然后使用GetTextMetrics,然后字符高度为tmHeight-tmInternalLeading. (2认同)