C++-如何计算相应字体对应的尺寸?
有这样一个需求,需要按照字号,生成一个相应字号文字的图片,图片的大小和字号有关系,
比如:
12号字体对应的图片尺寸是2020(未计算,只是假设),如何计算出2020(一个字)这个尺寸,考虑中英文,不考虑字间距。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
有这样一个需求,需要按照字号,生成一个相应字号文字的图片,图片的大小和字号有关系,
比如:
12号字体对应的图片尺寸是2020(未计算,只是假设),如何计算出2020(一个字)这个尺寸,考虑中英文,不考虑字间距。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
因为图片是以像素为单位的,但Windows在显示时以"逻辑英寸"为单位,而所谓的字号其实是以磅来单位的,所以这里要有一个统一的换算公式,由正常的字号转换为逻辑英寸。
下面是公式:
1英寸=72磅(Point)
用GetDeviceCaps(hDC, LOGPIXELSY)可以得到1英寸占多少个像素
所以
字号n所占像素(单位:磅)=GetDeviceCaps(hDC, LOGPIXELSY)*n / 72
如果是C++程序可以通过GetTextExtentPoint32函数获取字符串在屏幕上长度。
GetTextExtentPoint32
函数功能:该函数计算指定的正文字符串的高度和宽度。
函数原型:BOOL GetTextExtentPoint32(HDC hdc, LPCTSTR lpString, int cbString, LPSIZE lpSize);
参数:
hdc:设备环境句柄。
lpString:指向正文字符串的指针。此字符串不必以结束,因为cbString指定了字符串的长度。
cbString:指向字符串中的字符数。
lpSize:指向SIZE结构的指针,该结构中字符串的尺寸将被返回。
返回值:如果函数调用成功,返回值是非零值,如果函数调用失败,返回值是0。
Windows NT:若想获得更多的错误信息,请调用GetLastError函数。
http://msdn.microsoft.com/en-us/library/dd144938%28VS.85%29.aspx