我正在寻找一个函数,它的参数应该是字体名称、样本字符、样本字符的宽度和高度,并且应该返回字体大小。
它必须像这样。
GetFontSize(<Font Name>, <Sample Character>, <Sample Character Width>,
<Sample Character Height>)
它必须返回字体大小。
在delphi中可以这样做吗?
我只知道有一些方法可以做相反的事情--即从点尺寸中获取像素尺寸。
我唯一能想到的方法是在这个函数中设置一个 TCanvas
,并反复呼叫 GetTextExtent
上,每次都改变字体大小,直到你得到一个可以接受的接近你想要的大小。
根据你需要的精确程度,你可以将你所需要的高度以像素为单位转换为点--一个点是一英寸的172,而你的屏幕可能是每英寸96个像素(但请检查你的屏幕上有多少像素)。GetDeviceCaps
以获得真实数字)。) 见 这个问题.
这将使你的字体大小非常接近你想要的像素大小。
你可能想看看这个页面,它讨论的是 字号和点数.
它使用以下方法在点和像素大小之间进行转换。
你可以用它来进行转换。 你只需要注意Blorgbeard所说的你的屏幕dpi可能存在的差异。 点通常用于描述纸上的尺寸。 你需要决定如何将其映射到屏幕上。 例如,许多程序将允许您设置一个缩放级别。 这不会改变纸张上的打印尺寸,但会影响屏幕上的像素高度。
根据你想达到的目的,你可能需要得到字体的实际大小。如果你想了解字体到底是如何组合在一起的,请看以下内容 获取字体指标 该页面的代码使用了.Net库,但它有一个很好的解释。 如果你想在Delphi中获得文本指标,你可以使用 GetTextMetrics函数.
正如Rob在他的评论中所说,你可以通过设置Font.Size属性为负高度(像素)来绘制特定高度的文本。Windows将以该高度绘制文本。 在这种情况下,你不需要一个特定的字母或宽度,因为你在原型函数中已经有了。 对于一个给定的字体大小,每个字母将有不同的高度和宽度。 例如,大写字母会比小写字母高,像 "W "这样的字母会比 "i "这样的字母宽。