JDK:字体大小是如何生效的
Posted 柳鲲鹏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK:字体大小是如何生效的相关的知识,希望对你有一定的参考价值。
- Font()
传递字号,保存在size字段中。
- Font.deriveFont()
调用一个私有浮点构造器。从这里可以看到,JDK是支持浮点字体的。
泰山JDK为此专门修改,开放并扩充了构造函数,允许传递浮点。
pointSize的命名,疑似不准确。这里应该是像素?或者是FreeType的磅?
- Font.getSize2D()
获得浮点字号。
- SunGraphics2D.checkFontInfo()
AffineTransform devAt, textAt=null;
if (font.isTransformed())
textAt = font.getTransform();
textAt.scale(ptSize, ptSize);
也就是构造了一个变形器。
- Font2D(TrueTypeFont).getStrike()
- FontStrikeDesc()
- FileFontStrike()
double[] matrix = new double[4];
AffineTransform at = desc.glyphTx;
at.getMatrix(matrix);
字号信息保存在matrix中
- createScalerContextXY()
- Java_sun_font_FreetypeFontScaler_createScalerContextNative
freetypeScaler.c
从传递的参数matrix中获取数组。
ptsz = euclidianDistance(dmat[2], dmat[3]);
context->ptsz = (int)(ptsz * 64);
- setupFTContext
FT_Set_Char_Size(scalerInfo->face, 0, context->ptsz, 72, 72);
这个函数需要的字号有6位定点小数,所以前面乘64。
以上是关于JDK:字体大小是如何生效的的主要内容,如果未能解决你的问题,请参考以下文章