VC里或C#里的graphics库里的emSize到底是什么意思?
谢谢回答,但我知道是字体大小,也知道是相对大小,它的单位不是像素不是点不是英寸,我想知道到底是相对于什么的大小?
那就应该直接问一般说的字体大小单位是什么,这个和C#等编译器无关,和系统的字体设计以及显示映射有关。
其实我觉得对于一般开发者不必在这方面深究太多,只有涉及到打印输出时才需要了解。对于 font-size,只要知道它取不同数值时(比如 size= 12)文本有多大就好。我们关心的是字看起来有多大、字的大小是否好读美观,我们并不关心字母“A”的像素高度,或者“a”的字母像素高度。
显示中文时,任意emSize尺寸下每个字母或汉字都有一个长宽相等正方形的隐形渲染框,称为em框(和html中的em标签没关系),每个em框都是紧挨着的,在不同的字体样式下(斜体、粗体等),字体的渲染边界永远不会超过em框,换句话说字体实际尺寸永远小于em框,而每一个文字或字母显示上占据em框多少是不一样的;显示英文字体时,em宽度是却是可变的,因此这涉及到字体设计问题,所以你可以理解为1个emSize就是一个em框的高度单位或者抽象点就是一个em。
当我们设置fontsize=12pt的时候就是设定了一个对应关系,即一个em框的高度/宽度(中文)等于12个point(pt)。pt就是磅,音译,物理量,1pt=1/72in,1in=2.54cm,因此1pt相当于0.3528毫米。
而在显示时,可以采用函数测试输出尺寸:
public SizeF SizeOfPrintOut(Font font,string text)
{
Bitmap bmp = new Bitmap(1, 1);
Graphics g = Graphics.FromImage(bmp);
SizeF size = g.MeasureString(text, font);
g.Dispose();
bmp.Dispose();
return size;
}