亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ftbbox.c

?? a very goog book
?? C
?? 第 1 頁 / 共 2 頁
字號:
                    FT_Pos*  max )  {    /* always compare first and last points */    if      ( y1 < *min )  *min = y1;    else if ( y1 > *max )  *max = y1;    if      ( y4 < *min )  *min = y4;    else if ( y4 > *max )  *max = y4;    /* now, try to see if there are split points here */    if ( y1 <= y4 )    {      /* flat or ascending arc test */      if ( y1 <= y2 && y2 <= y4 && y1 <= y3 && y3 <= y4 )        return;    }    else /* y1 > y4 */    {      /* descending arc test */      if ( y1 >= y2 && y2 >= y4 && y1 >= y3 && y3 >= y4 )        return;    }    /* There are some split points.  Find them. */    {      FT_Pos    a = y4 - 3*y3 + 3*y2 - y1;      FT_Pos    b = y3 - 2*y2 + y1;      FT_Pos    c = y2 - y1;      FT_Pos    d;      FT_Fixed  t;      /* We need to solve "ax^2+2bx+c" here, without floating points!      */      /* The trick is to normalize to a different representation in order  */      /* to use our 16.16 fixed point routines.                            */      /*                                                                   */      /* We compute FT_MulFix(b,b) and FT_MulFix(a,c) after the            */      /* the normalization.  These values must fit into a single 16.16     */      /* value.                                                            */      /*                                                                   */      /* We normalize a, b, and c to "8.16" fixed float values to ensure   */      /* that their product is held in a "16.16" value.                    */      /*                                                                   */      {        FT_ULong  t1, t2;        int       shift = 0;        /* Technical explanation of what's happening there.            */        /*                                                             */        /*   The following computation is based on the fact that for   */        /*   any value "y", if "n" is the position of the most         */        /*   significant bit of "abs(y)" (starting from 0 for the      */        /*   least significant bit), then y is in the range            */        /*                                                             */        /*                  "-2^n..2^n-1"                              */        /*                                                             */        /*   We want to shift "a", "b" and "c" concurrently in order   */        /*   to ensure that they all fit in 8.16 values, which maps    */        /*   to the integer range "-2^23..2^23-1".                     */        /*                                                             */        /*   Necessarily, we need to shift "a", "b" and "c" so that    */        /*   the most significant bit of their absolute values is at   */        /*   _most_ at position 23.                                    */        /*                                                             */        /*   We begin by computing "t1" as the bitwise "or" of the     */        /*   absolute values of "a", "b", "c".                         */        /*                                                             */        t1  = (FT_ULong)((a >= 0) ? a : -a );        t2  = (FT_ULong)((b >= 0) ? b : -b );        t1 |= t2;        t2  = (FT_ULong)((c >= 0) ? c : -c );        t1 |= t2;        /*   Now, the most significant bit of "t1" is sure to be the   */        /*   msb of one of "a", "b", "c", depending on which one is    */        /*   expressed in the greatest integer range.                  */        /*                                                             */        /*   We now compute the "shift", by shifting "t1" as many      */        /*   times as necessary to move its msb to position 23.        */        /*                                                             */        /*   This corresponds to a value of t1 that is in the range    */        /*   0x40_0000..0x7F_FFFF.                                     */        /*                                                             */        /*   Finally, we shift "a", "b" and "c" by the same amount.    */        /*   This ensures that all values are now in the range         */        /*   -2^23..2^23, i.e. that they are now expressed as 8.16     */        /*   fixed float numbers.                                      */        /*                                                             */        /*   This also means that we are using 24 bits of precision    */        /*   to compute the zeros, independently of the range of       */        /*   the original polynom coefficients.                        */        /*                                                             */        /*   This should ensure reasonably accurate values for the     */        /*   zeros.  Note that the latter are only expressed with      */        /*   16 bits when computing the extrema (the zeros need to     */        /*   be in 0..1 exclusive to be considered part of the arc).   */        /*                                                             */        if ( t1 == 0 )  /* all coefficients are 0! */          return;        if ( t1 > 0x7FFFFFUL )        {          do          {            shift++;            t1 >>= 1;          } while ( t1 > 0x7FFFFFUL );          /* losing some bits of precision, but we use 24 of them */          /* for the computation anyway.                          */          a >>= shift;          b >>= shift;          c >>= shift;        }        else if ( t1 < 0x400000UL )        {          do          {            shift++;            t1 <<= 1;          } while ( t1 < 0x400000UL );          a <<= shift;          b <<= shift;          c <<= shift;        }      }      /* handle a == 0 */      if ( a == 0 )      {        if ( b != 0 )        {          t = - FT_DivFix( c, b ) / 2;          test_cubic_extrema( y1, y2, y3, y4, t, min, max );        }      }      else      {        /* solve the equation now */        d = FT_MulFix( b, b ) - FT_MulFix( a, c );        if ( d < 0 )          return;        if ( d == 0 )        {          /* there is a single split point at -b/a */          t = - FT_DivFix( b, a );          test_cubic_extrema( y1, y2, y3, y4, t, min, max );        }        else        {          /* there are two solutions; we need to filter them though */          d = FT_SqrtFixed( (FT_Int32)d );          t = - FT_DivFix( b - d, a );          test_cubic_extrema( y1, y2, y3, y4, t, min, max );          t = - FT_DivFix( b + d, a );          test_cubic_extrema( y1, y2, y3, y4, t, min, max );        }      }    }  }#endif  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    BBox_Cubic_To                                                      */  /*                                                                       */  /* <Description>                                                         */  /*    This function is used as a `cubic_to' emitter during               */  /*    FT_Raster_Decompose().  It checks a cubic Bezier curve with the    */  /*    current bounding box, and computes its extrema if necessary to     */  /*    update it.                                                         */  /*                                                                       */  /* <Input>                                                               */  /*    control1 :: A pointer to the first control point.                  */  /*    control2 :: A pointer to the second control point.                 */  /*    to       :: A pointer to the destination vector.                   */  /*                                                                       */  /* <InOut>                                                               */  /*    user     :: The address of the current walk context.               */  /*                                                                       */  /* <Return>                                                              */  /*    Always 0.  Needed for the interface only.                          */  /*                                                                       */  /* <Note>                                                                */  /*    In the case of a non-monotonous arc, we don't compute directly     */  /*    extremum coordinates, we subdivise instead.                        */  /*                                                                       */  static int  BBox_Cubic_To( FT_Vector*  control1,                 FT_Vector*  control2,                 FT_Vector*  to,                 TBBox_Rec*  user )  {    /* we don't need to check `to' since it is always an `on' point, thus */    /* within the bbox                                                    */    if ( CHECK_X( control1, user->bbox ) ||         CHECK_X( control2, user->bbox ) )        BBox_Cubic_Check( user->last.x,                          control1->x,                          control2->x,                          to->x,                          &user->bbox.xMin,                          &user->bbox.xMax );    if ( CHECK_Y( control1, user->bbox ) ||         CHECK_Y( control2, user->bbox ) )        BBox_Cubic_Check( user->last.y,                          control1->y,                          control2->y,                          to->y,                          &user->bbox.yMin,                          &user->bbox.yMax );    user->last = *to;    return 0;  }  /* documentation is in ftbbox.h */  FT_EXPORT_DEF( FT_Error )  FT_Outline_Get_BBox( FT_Outline*  outline,                       FT_BBox     *abbox )  {    FT_BBox     cbox;    FT_BBox     bbox;    FT_Vector*  vec;    FT_UShort   n;    if ( !abbox )      return FT_Err_Invalid_Argument;    if ( !outline )      return FT_Err_Invalid_Outline;    /* if outline is empty, return (0,0,0,0) */    if ( outline->n_points == 0 || outline->n_contours <= 0 )    {      abbox->xMin = abbox->xMax = 0;      abbox->yMin = abbox->yMax = 0;      return 0;    }    /* We compute the control box as well as the bounding box of  */    /* all `on' points in the outline.  Then, if the two boxes    */    /* coincide, we exit immediately.                             */    vec = outline->points;    bbox.xMin = bbox.xMax = cbox.xMin = cbox.xMax = vec->x;    bbox.yMin = bbox.yMax = cbox.yMin = cbox.yMax = vec->y;    vec++;    for ( n = 1; n < outline->n_points; n++ )    {      FT_Pos  x = vec->x;      FT_Pos  y = vec->y;      /* update control box */      if ( x < cbox.xMin ) cbox.xMin = x;      if ( x > cbox.xMax ) cbox.xMax = x;      if ( y < cbox.yMin ) cbox.yMin = y;      if ( y > cbox.yMax ) cbox.yMax = y;      if ( FT_CURVE_TAG( outline->tags[n] ) == FT_Curve_Tag_On )      {        /* update bbox for `on' points only */        if ( x < bbox.xMin ) bbox.xMin = x;        if ( x > bbox.xMax ) bbox.xMax = x;        if ( y < bbox.yMin ) bbox.yMin = y;        if ( y > bbox.yMax ) bbox.yMax = y;      }      vec++;    }    /* test two boxes for equality */    if ( cbox.xMin < bbox.xMin || cbox.xMax > bbox.xMax ||         cbox.yMin < bbox.yMin || cbox.yMax > bbox.yMax )    {      /* the two boxes are different, now walk over the outline to */      /* get the Bezier arc extrema.                               */      static const FT_Outline_Funcs  bbox_interface =      {        (FT_Outline_MoveTo_Func) BBox_Move_To,        (FT_Outline_LineTo_Func) BBox_Move_To,        (FT_Outline_ConicTo_Func)BBox_Conic_To,        (FT_Outline_CubicTo_Func)BBox_Cubic_To,        0, 0      };      FT_Error   error;      TBBox_Rec  user;      user.bbox = bbox;      error = FT_Outline_Decompose( outline, &bbox_interface, &user );      if ( error )        return error;      *abbox = user.bbox;    }    else      *abbox = bbox;    return FT_Err_Ok;  }/* END */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av在线不卡观看免费观看| 国产午夜亚洲精品理论片色戒| 毛片av一区二区| 欧美成人一区二区| 欧美三级三级三级| 在线精品视频免费观看| 波多野结衣中文字幕一区| 国产在线视频精品一区| 久久精品999| 国产一区二区三区免费观看 | 欧美午夜精品一区二区蜜桃| 在线日韩av片| 欧美久久久久久蜜桃| 91精品国产综合久久久久久| 欧美一级淫片007| 欧美xxxxxxxx| 国产日韩精品一区二区三区| 国产精品久久久久久久久免费相片 | 欧美国产乱子伦 | 一本一道综合狠狠老| 91麻豆高清视频| 欧美精品在线一区二区| 精品电影一区二区三区 | 欧美日韩国产区一| 欧美不卡激情三级在线观看| 国产女人aaa级久久久级| 一色屋精品亚洲香蕉网站| 亚洲综合激情另类小说区| 无码av中文一区二区三区桃花岛| 极品销魂美女一区二区三区| 国产成人av资源| 欧美色图在线观看| 久久久久久黄色| 一区二区三区精品视频在线| 喷白浆一区二区| av高清不卡在线| 日韩欧美一二三| 日韩一区日韩二区| 男人的天堂亚洲一区| 国产伦精品一区二区三区免费迷 | 日韩欧美成人激情| 国产精品久久久久久久久免费桃花| 亚洲电影视频在线| 国产一区欧美一区| 精品污污网站免费看| 欧美激情一区二区三区四区| 亚洲成av人片在www色猫咪| 国产精品一级在线| 欧美精品v国产精品v日韩精品| 欧美激情一区二区在线| 日韩国产欧美三级| 欧洲激情一区二区| 国产精品国产三级国产aⅴ中文| 人人超碰91尤物精品国产| 色哟哟国产精品免费观看| 精品理论电影在线| 午夜精品久久一牛影视| 色综合久久中文综合久久97| 国产午夜亚洲精品理论片色戒| 日日噜噜夜夜狠狠视频欧美人| 99国产麻豆精品| 国产亲近乱来精品视频| 老司机精品视频线观看86| 欧美猛男gaygay网站| 综合久久综合久久| 成人va在线观看| 国产欧美精品一区二区三区四区| 男人操女人的视频在线观看欧美| 欧美在线你懂的| 亚洲最新在线观看| 一本色道a无线码一区v| 国产精品乱人伦中文| 国产经典欧美精品| 久久精品一区二区| 久久99精品国产.久久久久久 | 国产精品麻豆久久久| 国产aⅴ综合色| 国产蜜臀av在线一区二区三区| 久久国产精品色婷婷| 日韩一区二区电影在线| 另类小说欧美激情| 精品入口麻豆88视频| 久久er99精品| 国产午夜三级一区二区三| 国产又黄又大久久| 国产女人18毛片水真多成人如厕| 国产成人精品www牛牛影视| 国产精品萝li| 在线亚洲免费视频| 日韩国产精品久久久| 欧美成人激情免费网| 美女国产一区二区| 欧美国产激情一区二区三区蜜月| 国产v综合v亚洲欧| 日韩毛片一二三区| 91精品综合久久久久久| 国产在线精品一区二区夜色 | 色诱亚洲精品久久久久久| 亚洲一区二区三区小说| 在线不卡一区二区| 国产成人精品www牛牛影视| 亚洲另类春色校园小说| 欧美日本在线视频| 岛国一区二区在线观看| 夜夜夜精品看看| 精品国产乱码久久久久久夜甘婷婷| 国产福利一区二区三区视频| 一级做a爱片久久| 精品国产91久久久久久久妲己| kk眼镜猥琐国模调教系列一区二区| 中文字幕在线不卡一区二区三区| 美女视频一区二区三区| 亚洲精品在线免费播放| 在线一区二区三区| 久久er99热精品一区二区| 亚洲国产精品99久久久久久久久| 91捆绑美女网站| 黄网站免费久久| 亚洲美女视频在线观看| 91精品国产福利在线观看| 丰满少妇在线播放bd日韩电影| 亚洲视频在线一区| 欧美mv日韩mv| 69久久99精品久久久久婷婷| 国产成人av影院| 亚洲午夜成aⅴ人片| 国产区在线观看成人精品| 色偷偷久久人人79超碰人人澡| 极品少妇一区二区三区精品视频 | 92精品国产成人观看免费| 亚洲精品亚洲人成人网在线播放| 欧美精品一区二区在线观看| 99久久精品国产导航| 免费黄网站欧美| 亚洲婷婷国产精品电影人久久| 538prom精品视频线放| 国产乱码字幕精品高清av| 亚洲图片欧美视频| 国产欧美精品一区| 91精品在线麻豆| 91在线国产福利| 国内外成人在线视频| 一区二区三区自拍| 国产精品免费网站在线观看| 欧美一卡二卡在线| 欧美日韩视频在线第一区| 97精品久久久久中文字幕| 国产一区二区三区久久久 | 欧美三级在线看| 91色porny蝌蚪| 94色蜜桃网一区二区三区| 激情文学综合网| 日产精品久久久久久久性色| 亚洲精品福利视频网站| 亚洲欧美区自拍先锋| 国产欧美1区2区3区| 精品福利一区二区三区免费视频| 欧美三区免费完整视频在线观看| 99久久亚洲一区二区三区青草| www.色精品| 成人av网站免费观看| 国产激情视频一区二区三区欧美 | 欧美日韩免费电影| 欧美日韩国产系列| 欧美日韩亚洲综合一区| 国产超碰在线一区| 一本大道久久a久久精品综合| 成人国产精品免费观看动漫| 国产精品自拍av| 国产不卡一区视频| 欧美性受xxxx| 欧美视频一区二区三区四区 | 97精品国产露脸对白| 国产不卡一区视频| 成人午夜私人影院| 成人免费视频播放| 色综合天天综合给合国产| 国产精品99久| 欧美亚洲另类激情小说| 欧美亚洲高清一区二区三区不卡| 在线欧美日韩国产| 欧美日韩免费一区二区三区| 日韩欧美一区二区在线视频| 91精品国产综合久久福利软件| 欧美一区在线视频| 国产视频911| 亚洲六月丁香色婷婷综合久久| 偷拍一区二区三区| 精品一区二区久久| 成人av影院在线| 欧美三级蜜桃2在线观看| 日韩女优制服丝袜电影| 国产欧美一区二区精品性色| 亚洲电影一区二区| 国产在线播放一区| 色哟哟一区二区| 精品福利av导航| 日韩综合小视频| 国产伦精品一区二区三区免费迷 | 污片在线观看一区二区|