首页 > 未分类 > (转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果
2019
11-29

(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果

使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果

 

前言:

Freetype是一个跨平台、开源的字体渲染器,网上很多文章介绍,本人就不啰嗦了。本文重点在于实现文章标题所属的各种效果,不是Freetype的基本使用方法介绍文档,所以对于Freetype不熟悉的同学们请先学习下Freetype的基本用法,才可以使用本文中所提及的方法。

正文:

FreeType实现矢量字体的粗体、斜体、描边、阴影效果不是一件容易的事,本人认为皆因Freetype的接口太过于底层化,Freetype没有对其进行上层包装,所以要实现这些对于软件/游戏来说的基本效果,都是件挺麻烦的事情。不过,问题总是会有解决方法的,这些效果的实现,请听本人一个个道来:

1.      加粗

加粗可以使用FreeType中的一个API来实现FT_Outline_Embolden,但是这个API不支持水平垂直方向加粗量的分别设置,所以,需要参照FT_Outline_Embolden的实现重新编写一个函数,GDI++已经做了这个事情,引用它的代码:

 

(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第1张  | 逗分享开发经验// 就是FT_Outline_Embolden
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第2张  | 逗分享开发经验
FT_Error Old_FT_Outline_Embolden( FT_Outline*  outline, FT_Pos strength )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第3张  | 逗分享开发经验
{
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第6张  | 逗分享开发经验    FT_Vector
*    points;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第7张  | 逗分享开发经验    FT_Vector    v_prev, v_first, v_next, v_cur;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第8张  | 逗分享开发经验    FT_Angle    rotate, angle_in, angle_out;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第9张  | 逗分享开发经验    FT_Int        c, n, first;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第10张  | 逗分享开发经验    FT_Int        orientation;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第11张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第12张  | 逗分享开发经验    
if ( !outline )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第13张  | 逗分享开发经验        
return FT_Err_Invalid_Argument;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第14张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第15张  | 逗分享开发经验    strength 
/= 2;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第16张  | 逗分享开发经验    
if ( strength == 0 )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第17张  | 逗分享开发经验        
return FT_Err_Ok;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第18张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第19张  | 逗分享开发经验    orientation 
= FT_Outline_Get_Orientation( outline );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第20张  | 逗分享开发经验    
if ( orientation == FT_ORIENTATION_NONE )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第21张  | 逗分享开发经验    
{
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第24张  | 逗分享开发经验        
if ( outline->n_contours )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第25张  | 逗分享开发经验            
return FT_Err_Invalid_Argument;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第26张  | 逗分享开发经验        
else
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第27张  | 逗分享开发经验            
return FT_Err_Ok;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第28张  | 逗分享开发经验    }

(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第29张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第30张  | 逗分享开发经验    
if ( orientation == FT_ORIENTATION_TRUETYPE )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第31张  | 逗分享开发经验        rotate 
= FT_ANGLE_PI2;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第32张  | 逗分享开发经验    
else
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第33张  | 逗分享开发经验        rotate 
= FT_ANGLE_PI2;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第34张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第35张  | 逗分享开发经验    points 
= outline->points;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第36张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第37张  | 逗分享开发经验    first 
= 0;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第38张  | 逗分享开发经验    
for ( c = 0; c < outline->n_contours; c++ )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第39张  | 逗分享开发经验    
{
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第42张  | 逗分享开发经验        
int  last = outline->contours[c];
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第43张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第44张  | 逗分享开发经验        v_first 
= points[first];
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第45张  | 逗分享开发经验        v_prev  
= points[last];
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第46张  | 逗分享开发经验        v_cur   
= v_first;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第47张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第48张  | 逗分享开发经验        
for ( n = first; n <= last; n++ )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第49张  | 逗分享开发经验        
{
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第52张  | 逗分享开发经验            FT_Vector    
inout;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第53张  | 逗分享开发经验            FT_Angle    angle_diff;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第54张  | 逗分享开发经验            FT_Pos        d;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第55张  | 逗分享开发经验            FT_Fixed    scale;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第56张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第57张  | 逗分享开发经验            
if ( n < last )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第58张  | 逗分享开发经验                v_next 
= points[n + 1];
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第59张  | 逗分享开发经验            
else
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第60张  | 逗分享开发经验                v_next 
= v_first;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第61张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第62张  | 逗分享开发经验            
/* compute the in and out vectors */
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第64张  | 逗分享开发经验            
in.x = v_cur.x  v_prev.x;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第65张  | 逗分享开发经验            
in.y = v_cur.y  v_prev.y;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第66张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第67张  | 逗分享开发经验            
out.x = v_next.x  v_cur.x;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第68张  | 逗分享开发经验            
out.y = v_next.y  v_cur.y;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第69张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第70张  | 逗分享开发经验            angle_in   
= FT_Atan2( in.x, in.y );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第71张  | 逗分享开发经验            angle_out  
= FT_Atan2( out.x, out.y );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第72张  | 逗分享开发经验            angle_diff 
= FT_Angle_Diff( angle_in, angle_out );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第73张  | 逗分享开发经验            scale      
= FT_Cos( angle_diff / 2 );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第74张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第75张  | 逗分享开发经验            
if ( scale < 0x4000L && scale > 0x4000L )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第76张  | 逗分享开发经验                
in.x = in.y = 0;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第77张  | 逗分享开发经验            
else
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第78张  | 逗分享开发经验            
{
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第81张  | 逗分享开发经验                d 
= FT_DivFix( strength, scale );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第82张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第83张  | 逗分享开发经验                FT_Vector_From_Polar( 
&in, d, angle_in + angle_diff / 2  rotate );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第84张  | 逗分享开发经验            }

(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第85张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第86张  | 逗分享开发经验            outline
->points[n].x = v_cur.x + strength + in.x;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第87张  | 逗分享开发经验            
//伀偙傟傪僐儊儞僩傾僂僩偟偨偩偗
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第88张  | 逗分享开发经验            
//outline->points[n].y = v_cur.y + strength + in.y;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第89张  | 逗分享开发经验

(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第90张  | 逗分享开发经验            v_prev 
= v_cur;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第91张  | 逗分享开发经验            v_cur  
= v_next;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第92张  | 逗分享开发经验        }

(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第93张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第94张  | 逗分享开发经验        first 
= last + 1;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第95张  | 逗分享开发经验    }

(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第96张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第97张  | 逗分享开发经验    
return FT_Err_Ok;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第98张  | 逗分享开发经验}

(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第99张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第100张  | 逗分享开发经验
// 垂直加粗
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第101张  | 逗分享开发经验
FT_Error Vert_FT_Outline_Embolden( FT_Outline*  outline, FT_Pos strength )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第102张  | 逗分享开发经验
{
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第105张  | 逗分享开发经验    FT_Vector
*    points;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第106张  | 逗分享开发经验    FT_Vector    v_prev, v_first, v_next, v_cur;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第107张  | 逗分享开发经验    FT_Angle    rotate, angle_in, angle_out;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第108张  | 逗分享开发经验    FT_Int        c, n, first;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第109张  | 逗分享开发经验    FT_Int        orientation;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第110张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第111张  | 逗分享开发经验    
if ( !outline )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第112张  | 逗分享开发经验        
return FT_Err_Invalid_Argument;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第113张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第114张  | 逗分享开发经验    strength 
/= 2;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第115张  | 逗分享开发经验    
if ( strength == 0 )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第116张  | 逗分享开发经验        
return FT_Err_Ok;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第117张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第118张  | 逗分享开发经验    orientation 
= FT_Outline_Get_Orientation( outline );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第119张  | 逗分享开发经验    
if ( orientation == FT_ORIENTATION_NONE )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第120张  | 逗分享开发经验    
{
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第123张  | 逗分享开发经验        
if ( outline->n_contours )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第124张  | 逗分享开发经验            
return FT_Err_Invalid_Argument;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第125张  | 逗分享开发经验        
else
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第126张  | 逗分享开发经验            
return FT_Err_Ok;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第127张  | 逗分享开发经验    }

(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第128张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第129张  | 逗分享开发经验    
if ( orientation == FT_ORIENTATION_TRUETYPE )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第130张  | 逗分享开发经验        rotate 
= FT_ANGLE_PI2;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第131张  | 逗分享开发经验    
else
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第132张  | 逗分享开发经验        rotate 
= FT_ANGLE_PI2;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第133张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第134张  | 逗分享开发经验    points 
= outline->points;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第135张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第136张  | 逗分享开发经验    first 
= 0;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第137张  | 逗分享开发经验    
for ( c = 0; c < outline->n_contours; c++ )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第138张  | 逗分享开发经验    
{
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第141张  | 逗分享开发经验        
int  last = outline->contours[c];
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第142张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第143张  | 逗分享开发经验        v_first 
= points[first];
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第144张  | 逗分享开发经验        v_prev  
= points[last];
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第145张  | 逗分享开发经验        v_cur   
= v_first;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第146张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第147张  | 逗分享开发经验        
for ( n = first; n <= last; n++ )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第148张  | 逗分享开发经验        
{
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第151张  | 逗分享开发经验            FT_Vector    
inout;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第152张  | 逗分享开发经验            FT_Angle    angle_diff;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第153张  | 逗分享开发经验            FT_Pos        d;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第154张  | 逗分享开发经验            FT_Fixed    scale;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第155张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第156张  | 逗分享开发经验            
if ( n < last )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第157张  | 逗分享开发经验                v_next 
= points[n + 1];
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第158张  | 逗分享开发经验            
else
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第159张  | 逗分享开发经验                v_next 
= v_first;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第160张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第161张  | 逗分享开发经验            
/* compute the in and out vectors */
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第163张  | 逗分享开发经验            
in.x = v_cur.x  v_prev.x;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第164张  | 逗分享开发经验            
in.y = v_cur.y  v_prev.y;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第165张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第166张  | 逗分享开发经验            
out.x = v_next.x  v_cur.x;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第167张  | 逗分享开发经验            
out.y = v_next.y  v_cur.y;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第168张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第169张  | 逗分享开发经验            angle_in   
= FT_Atan2( in.x, in.y );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第170张  | 逗分享开发经验            angle_out  
= FT_Atan2( out.x, out.y );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第171张  | 逗分享开发经验            angle_diff 
= FT_Angle_Diff( angle_in, angle_out );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第172张  | 逗分享开发经验            scale      
= FT_Cos( angle_diff / 2 );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第173张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第174张  | 逗分享开发经验            
if ( scale < 0x4000L && scale > 0x4000L )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第175张  | 逗分享开发经验                
in.x = in.y = 0;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第176张  | 逗分享开发经验            
else
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第177张  | 逗分享开发经验            
{
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第180张  | 逗分享开发经验                d 
= FT_DivFix( strength, scale );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第181张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第182张  | 逗分享开发经验                FT_Vector_From_Polar( 
&in, d, angle_in + angle_diff / 2  rotate );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第183张  | 逗分享开发经验            }

(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第184张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第185张  | 逗分享开发经验            
//outline->points[n].x = v_cur.x + strength + in.x;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第186张  | 逗分享开发经验            
//仾偙傟傪僐儊儞僩傾僂僩偟偨偩偗
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第187张  | 逗分享开发经验
            outline->points[n].y = v_cur.y + strength + in.y;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第188张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第189张  | 逗分享开发经验            v_prev 
= v_cur;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第190张  | 逗分享开发经验            v_cur  
= v_next;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第191张  | 逗分享开发经验        }

(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第192张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第193张  | 逗分享开发经验        first 
= last + 1;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第194张  | 逗分享开发经验    }

(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第195张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第196张  | 逗分享开发经验    
return FT_Err_Ok;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第197张  | 逗分享开发经验}

(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第198张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第199张  | 逗分享开发经验
// 新的加粗函数
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第200张  | 逗分享开发经验
FT_Error New_FT_Outline_Embolden( FT_Outline*  outline, FT_Pos str_h, FT_Pos str_v )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第201张  | 逗分享开发经验
{
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第204张  | 逗分享开发经验    
if ( !outline ) return FT_Err_Invalid_Argument;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第205张  | 逗分享开发经验    
int orientation = FT_Outline_Get_Orientation( outline );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第206张  | 逗分享开发经验    
if ( orientation == FT_ORIENTATION_NONE )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第207张  | 逗分享开发经验        
if ( outline->n_contours ) return FT_Err_Invalid_Argument;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第208张  | 逗分享开发经验    Vert_FT_Outline_Embolden( outline, str_v );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第209张  | 逗分享开发经验    Old_FT_Outline_Embolden( outline, str_h );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第210张  | 逗分享开发经验    
return FT_Err_Ok;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第211张  | 逗分享开发经验}

(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第212张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第213张  | 逗分享开发经验
// 让一个字体槽加粗,并且填充其他的大小属性
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第214张  | 逗分享开发经验
void New_GlyphSlot_Embolden( FT_GlyphSlot  slot , const Vector2Float &embolden)
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第215张  | 逗分享开发经验
{
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第218张  | 逗分享开发经验    
if(embolden == Vector2Float::ZERO)
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第219张  | 逗分享开发经验        
return;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第220张  | 逗分享开发经验    FT_Library  library 
= slot->library;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第221张  | 逗分享开发经验    FT_Face     face    
= slot->face;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第222张  | 逗分享开发经验    FT_Error    error;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第223张  | 逗分享开发经验    FT_Pos      xstr 
= embolden.x, ystr = embolden.y;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第224张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第225张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第226张  | 逗分享开发经验    
if ( slot->format != FT_GLYPH_FORMAT_OUTLINE &&
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第227张  | 逗分享开发经验        slot
->format != FT_GLYPH_FORMAT_BITMAP )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第228张  | 逗分享开发经验        
return;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第229张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第230张  | 逗分享开发经验    
if ( slot->format == FT_GLYPH_FORMAT_OUTLINE )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第231张  | 逗分享开发经验    
{
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第234张  | 逗分享开发经验        FT_BBox oldBox;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第235张  | 逗分享开发经验        FT_Outline_Get_CBox(
&slot->outline , &oldBox);
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第236张  | 逗分享开发经验        error 
= New_FT_Outline_Embolden( &slot->outline, xstr , ystr);
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第237张  | 逗分享开发经验        
if ( error )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第238张  | 逗分享开发经验            
return;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第239张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第240张  | 逗分享开发经验        FT_BBox newBox;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第241张  | 逗分享开发经验        FT_Outline_Get_CBox(
&slot->outline , &newBox);
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第242张  | 逗分享开发经验        xstr 
= (newBox.xMax  newBox.xMin)  (oldBox.xMax  oldBox.xMin);
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第243张  | 逗分享开发经验        ystr 
= (newBox.yMax  newBox.yMin)  (oldBox.yMax  oldBox.yMin);
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第244张  | 逗分享开发经验    }

(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第245张  | 逗分享开发经验    
else if ( slot->format == FT_GLYPH_FORMAT_BITMAP )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第246张  | 逗分享开发经验    
{
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第249张  | 逗分享开发经验        xstr 
= FT_PIX_FLOOR( xstr );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第250张  | 逗分享开发经验        
if ( xstr == 0 )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第251张  | 逗分享开发经验            xstr 
= 1 << 6;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第252张  | 逗分享开发经验        ystr 
= FT_PIX_FLOOR( ystr );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第253张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第254张  | 逗分享开发经验        error 
= FT_Bitmap_Embolden( library, &slot->bitmap, xstr, ystr );
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第255张  | 逗分享开发经验        
if ( error )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第256张  | 逗分享开发经验            
return;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第257张  | 逗分享开发经验    }

(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第258张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第259张  | 逗分享开发经验    
if ( slot->advance.x )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第260张  | 逗分享开发经验        slot
->advance.x += xstr;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第261张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第262张  | 逗分享开发经验    
if ( slot->advance.y )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第263张  | 逗分享开发经验        slot
->advance.y += ystr;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第264张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第265张  | 逗分享开发经验    slot
->metrics.width        += xstr;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第266张  | 逗分享开发经验    slot
->metrics.height       += ystr;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第267张  | 逗分享开发经验    slot
->metrics.horiBearingY += ystr;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第268张  | 逗分享开发经验    slot
->metrics.horiAdvance  += xstr;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第269张  | 逗分享开发经验    slot
->metrics.vertBearingX -= xstr / 2;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第270张  | 逗分享开发经验    slot
->metrics.vertBearingY += ystr;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第271张  | 逗分享开发经验    slot
->metrics.vertAdvance  += ystr;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第272张  | 逗分享开发经验
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第273张  | 逗分享开发经验    
if ( slot->format == FT_GLYPH_FORMAT_BITMAP )
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第274张  | 逗分享开发经验        slot
->bitmap_top += ystr >> 6;
(转)使用FreeType实现矢量字体的粗体、斜体、描边、阴影效果 - 第275张  | 逗分享开发经验}
最后编辑:
作者:游戏创作者大陆