标准固定
1 英寸=25.4 毫米
1 寸=33.3333333 毫米
1点(英美点)(PT)(磅)=0.3527毫米=1/72英寸(Office里面的点)
字体号数与像素对应关系
Word默认的图片分辨率为96dpi,像素必须为整数。程序计算时尽量先算乘法再除。
八号=5磅(5pt)=(5/72)*96=6.67=6px
七号=5.5磅=(5.5/72)*96=7.3=7px
小六=6.5磅=(6.5/72)*96=8.67=8px
六号=7.5磅=(7.5/72)*96=10px
小五=9磅=(9/72)*96=12px
五号=10.5磅=(10.5/72)*96=14px
小四=12磅=(12/72)*96=16px
四号=14磅=(14/72)*96=18.67=18px
小三=15磅=(15/72)*96=20px
三号=16磅=(16/72)*96=21.3=21px
小二=18磅=(18/72)*96=24px
二号=22磅=(22/72)*96=29.3=29px
小一=24磅=(24/72)*96=32px
一号=26磅=(26/72)*96=34.67=34px
小初=36磅=(36/72)*96=48px
初号=42磅=(42/72)*96=56px
CFont font;
font.CreateFont(37.5, // nHeight
37.5, // nWidth
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
VARIABLE_PITCH | FF_SWISS, // nPitchAndFamily
_T("黑体")); // lpszFac
//font.CreatePointFont(281.25, _T("黑体")); //即4.5pt
SelectObject(memDC, font);
SetBkMode(memDC, TRANSPARENT);
HFONT CreateFont(
int cHeight, //字体的逻辑高度
int cWidth, //字体的逻辑宽度
int cEscapement, //指定移位向量相对X轴的偏转角度
int cOrientation, //指定字符基线相对X轴的偏转角度
int cWeight, //设置字体粗细程度
DWORD bItalic, //是否启用斜体
DWORD bUnderline, //是否启用下划线
DWORD bStrikeOut, //是否启用删除线
DWORD iCharSet, //指定字符集
DWORD iOutPrecision, //输出精度
DWORD iClipPrecision, //剪裁精度
DWORD iQuality, //输出质量
DWORD iPitchAndFamily, //字体族
LPCSTR pszFaceName //字体名
);
CreatePointFont
这个函数提供了一种简单的方法来创建指定字体类型和字体大小 。
函数原型:
BOOL CreatePointFont(
int nPointSize,
LPCTSTR lpszFaceName,
CDC* pDC = NULL
);
nPointSize参数是磅的十倍,但是磅如何和像素点进行转化呢?
二者的关系为:
像素点数 = 96* 磅数/72
也就是说
磅数 = 像素点数 *72/96
一般打印标签文件标示的都是分辨率是96,比如4.5pt磅, 求转分辨率是600对应的磅?
先算600时的像素A=4.5*600/72
再算对应96时的磅B=A*72/96
即4.5*600/96=28.125 再*10 即281.25
font.CreatePointFont(281.25, _T("黑体")); //即4.5pt
我还有点不明白,如何转为最上面的像素 宽和高,但这里只有一个4.5pt,转换后也只有一个值,这是怎么计算的?还是指对角线长度?字号大小就是字体的高度?