Ai
1 Star 1 Fork 1

橙里路人/depends

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
freetype_demo.cpp 3.06 KB
一键复制 编辑 原始数据 按行查看 历史
#include <stdio.h>
#include <ft2build.h>
#include FT_FREETYPE_H
#define WIDTH 80
#define HEIGHT 80
// 用于存储位图数据
unsigned char image[HEIGHT][WIDTH];
// 清除图像数据
void draw_clear() {
int i, j;
for (i = 0; i < HEIGHT; i++) {
for (j = 0; j < WIDTH; j++) {
image[i][j] = 0x0;
}
}
}
// 将字符渲染到位图中
void draw_bitmap(FT_Bitmap *bitmap, FT_Int x, FT_Int y) {
FT_Int i, j, p, q;
FT_Int x_max = x + bitmap->width;
FT_Int y_max = y + bitmap->rows;
for (i = x, p = 0; i < x_max; i++, p++) {
for (j = y, q = 0; j < y_max; j++, q++) {
if (i < 0 || j < 0 || i >= WIDTH || j >= HEIGHT) {
continue;
}
image[j][i] |= bitmap->buffer[q * bitmap->width + p];
}
}
}
// 将图像保存为 PGM 文件
void save_image(const char *filename) {
FILE *file = fopen(filename, "w");
if (file == NULL) {
printf("无法打开文件 %s\n", filename);
return;
}
fprintf(file, "P2\n");
fprintf(file, "%d %d\n", WIDTH, HEIGHT);
fprintf(file, "255\n");
for (int i = 0; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
fprintf(file, "%3d ", image[i][j]);
}
fprintf(file, "\n");
}
fclose(file);
}
int main(int argc, char **argv) {
FT_Library library;
FT_Face face;
FT_GlyphSlot slot;
FT_Error error;
char *filename = "C:/Windows/Fonts/arial.ttf"; // 请替换为实际的字体文件路径
char *text = "A"; // 要渲染的字符
int font_size = 48;
// 初始化 FreeType 库
error = FT_Init_FreeType(&library);
if (error) {
printf("无法初始化 FreeType 库\n");
return 1;
}
// 加载字体文件
error = FT_New_Face(library, filename, 0, &face);
if (error == FT_Err_Unknown_File_Format) {
printf("不支持的字体文件格式\n");
} else if (error) {
printf("无法加载字体文件 %s\n", filename);
return 1;
}
// 设置字体大小
error = FT_Set_Pixel_Sizes(face, 0, font_size);
if (error) {
printf("无法设置字体大小\n");
return 1;
}
// 获取字符的字形索引
FT_UInt glyph_index = FT_Get_Char_Index(face, *text);
// 加载字形
error = FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT);
if (error) {
printf("无法加载字形\n");
return 1;
}
// 渲染字形为位图
error = FT_Render_Glyph(face->glyph, FT_RENDER_MODE_NORMAL);
if (error) {
printf("无法渲染字形\n");
return 1;
}
// 获取字形槽
slot = face->glyph;
// 清除图像数据
draw_clear();
// 将位图绘制到图像中
draw_bitmap(&slot->bitmap, 0, 0);
// 保存图像为 PGM 文件
save_image("output.pgm");
// 清理资源
FT_Done_Face(face);
FT_Done_FreeType(library);
system("pause");
return 0;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/binary0010/depends.git
git@gitee.com:binary0010/depends.git
binary0010
depends
depends
master

搜索帮助