FreeType/FT_Size_Metrics/x_scale/y_scale是如何计算的

Posted 柳鲲鹏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FreeType/FT_Size_Metrics/x_scale/y_scale是如何计算的相关的知识,希望对你有一定的参考价值。

具体函数是ftobj.c中的FT_Request_Metrics()

  • 赋值

约3304行

        metrics->y_scale = FT_DivFix( scaled_h, h );

//宋体100: 1638400 = FT_DivFix( 6400, 256 )
//TNR 100: 204800 = FT_DivFix( 6400, 2048 )

此处有疑点:为什么认为256是定点数?

  • scaled_h的计算
scaled_h = FT_REQUEST_HEIGHT( req );


#define FT_REQUEST_HEIGHT( req )                                            \\
          ( (req)->vertResolution                                           \\
              ? ( (req)->height * (FT_Pos)(req)->vertResolution + 36 ) / 72 \\
              : (req)->height )
//72 ? 6400 : 6400
  • h的计算
      switch ( req->type )
      
      case FT_SIZE_REQUEST_TYPE_NOMINAL:
        w = h = face->units_per_EM;
  • FT_Size_RequestRec.height的计算
FT_Set_Char_Size(FT_F26Dot6  char_height)

req.height         = char_height;

此处的char_height是定点数,6400=100*64(64是6bit的关系)

以上是关于FreeType/FT_Size_Metrics/x_scale/y_scale是如何计算的的主要内容,如果未能解决你的问题,请参考以下文章

FreeType/FT_Size_Metrics/x_ppem /y_ppem 是如何计算的

FreeType/FT_Size_Metrics/x_ppem /y_ppem 是如何计算的