freetype2 下载编译以及测试代码
源码: https://sourceforge.net/projects/freetype/files/freetype2
- 下载解压后,进入源码目录执行cmake-gui,界面中配置源码目录与编译目录,然后点击左下角Configure。
- 界面中FT_DISABLE_BROTLI、FT_DISABLE_BZIP2、FT_DISABLE_HARFBUZZ、FT_DISABLE_PNG、FT_DISABLE_ZLIB全部选中。
- 再次点击Configure,点击Generate。
- 进入配置的编译目录,执行make命令即可编译出静态库。
- 编辑CMakeLists.txt,找到"add_library(freetype"这一行,改为 "add_library(freetype SHARED",保存后重新执行cmake-gui,Configure、Gernerate,进入编译目录执行make命令后即可编译出动态库。
作者:车到山前必有路2021
链接:https://www.jianshu.com/p/8cf456a15c69
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
#include <stdio.h>
#include <string.h>
#include <freetype/freetype.h>
#include <freetype/ftoutln.h>
#include <freetype/ftglyph.h>
int main(int argc, char* argv[])
{
FT_Library library;
FT_Face face;
FT_Vector pen;
FT_Error error;
FT_UInt charIdx;
wchar_t wch_data[] = L"pp happy, new year!!!\n天地转,光阴迫,一万年太久,只争朝夕!";//u'Z', U'Z'
char* char_buffer; // 用户申请的显示区域空间
int startX, startY; // 字符图像开始装入的位置
char *font_file = "simfang.ttf";
int font_width = 32;//
int font_height = 32;//!!!
printf("sizeof(wchar_t) = %ld\n", sizeof(wchar_t));
/*
1.在windows平台下sizeof(wchar_t)为2,而在linux平台下sizeof(wchar_t)为4。
2.在windows平台下宽字符(或字符串)字面量使用UTF-16编码,linux平台下使用UTF-32编码。
*/
if(argc <= 1){
}else if(argc <= 2){
font_file = argv[1];
}else if(argc <= 3){
font_file = argv[1];
font_width = atoi(argv[2]);
font_height = atoi(argv[2]);
}else if(argc <= 4){
font_file = argv[1];
font_width = atoi(argv[2]);
font_height = atoi(argv[3]);
}
// 1. 初始化freetype2库
error = FT_Init_FreeType(&library);
// 2. 创建一个face
error = FT_New_Face(library, font_file, 0, &face);
// 3. 设置字体尺寸
#if 0
/*
字符宽度和高度以1/64点为单位表示。点是物理上的距离,一个点代表1/72英寸(2.54cm)
分辨率以dpi(dots per inch)为单位表示,表示一个英寸有多少个像素
字符物理大小为: char_width*64* (1/64) * (1/72)英寸
字符的像素为: char_width*64* (1/64) * (1/72)*horz_resolution
FT_Set_Char_Size( FT_Face face,
FT_F26Dot6 char_width, //字符宽度,单位为1/64点
FT_F26Dot6 char_height, //字符高度,单位为1/64点
FT_UInt horz_resolution, //水平分辨率
FT_UInt vert_resolution ); //垂直分辨率
*/
error = FT_Set_Char_Size(face, 0, font_height*64, 72, 72);
#else
error = FT_Set_Pixel_Sizes(face, font_width, font_height);
#endif
//斜体在FreeType中可以通过矩阵变换来实现,只要把矩阵设置成一个切边矩阵就可以了
// 倾斜度,越大就越斜
float lean = 0.6f;
FT_Matrix matrix;
matrix.xx = 0x10000L;
matrix.xy = lean * 0x10000L;
matrix.yx = 0;
matrix.yy = 0x10000L;
//FT_Set_Transform(face, &matrix, 0);
//pen.x = img_x*64;
//pen.y = (img_y)*64;//
pen.x = 0;
pen.y = 0;
FT_Set_Transform(face, &matrix, &pen);
//error = FT_Select_Charmap(fontFace, FT_ENCODING_UNICODE);
//error = FT_Select_Charmap(face, FT_ENCODING_BIG5 ); /* big5编码 , 默认为UNICODE */
//error = FT_Set_Transform( face, &matrix, &pen );//旋转
char bitmap_file[256];