参考的代码有:

https://blog.csdn.net/quantum7/article/details/79762714

https://blog.csdn.net/quantum7/article/details/107279477

具体代码:

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>#include <ft2build.h>
#include <freetype/freetype.h>
#include FT_FREETYPE_H#define FONT_FILE "/home/uos/font/simsun.ttc"static void dumpBuffer(char* pBuffer, int w, int h)
{int i=0;int j=0;printf("w=%d, h=%d\n", w, h);for (i=0; i<h; i++){printf("|");for (j=0; j<w; j++){printf(((pBuffer[i * w  + j]) == 0 ) ? " " : "1");}printf("|\n");}
}static void dumpFontBmp(FT_Bitmap* pBmp)
{int w = pBmp->width;int h = pBmp->rows;dumpBuffer(pBmp->buffer, w, h);
}static void rotate_90(FT_Bitmap* pBmp)
{int w = pBmp->width;int h = pBmp->rows;int i=0;char* pRotated;int size;int offset=0;size = w * h;pRotated = (char*)malloc(size);memcpy(pRotated, pBmp->buffer, size);int startPos = (h - 1)*w;i = 0;for (int x = 0; x < w; x++){int offset = startPos;for (int y = h - 1; y >= 0; y--){pRotated[i] = pBmp->buffer[offset + x];i++;offset -= w;}}dumpBuffer(pRotated, h, w);
}static void rotate_270(FT_Bitmap* pBmp)
{int w = pBmp->width;int h = pBmp->rows;int i=0;char* pRotated;int size;int offset=0;size = w * h;pRotated = (char*)malloc(size);memcpy(pRotated, pBmp->buffer, size);i = 0;for (int x = w-1; x >= 0; x--){int offset = 0;for (int y = 0; y < h; y++){pRotated[i] = pBmp->buffer[offset + x];i++;offset += w;}}dumpBuffer(pRotated, h, w);
}int main()
{FT_Library  m_pFTLib;FT_Face     m_pFTFace;wchar_t chinese_char = L'泰';FT_Error result = FT_Init_FreeType(&m_pFTLib);if(FT_New_Face(m_pFTLib, FONT_FILE, 0, &m_pFTFace)){printf("FT_New_Face error!\n");return -1;}//FT_ENCODING_GB2312, FT_ENCODING_UNICODEFT_Select_Charmap(m_pFTFace, FT_ENCODING_UNICODE);FT_Set_Char_Size(m_pFTFace, 0, 12<<6, 200, 200);result = FT_Load_Glyph(m_pFTFace, FT_Get_Char_Index(m_pFTFace, chinese_char), FT_LOAD_DEFAULT);// 第二个参数为渲染模式result = FT_Render_Glyph(m_pFTFace->glyph,  FT_RENDER_MODE_NORMAL);  printf("result=%d\n", result);dumpFontBmp(&(m_pFTFace->glyph->bitmap));rotate_90( &(m_pFTFace->glyph->bitmap));rotate_270(&(m_pFTFace->glyph->bitmap));return 0;
}

原始字体:

|             111               |
|             1111              |
|             111         11    |
|            111         1111   |
|  111111111111111111111111111  |
|  11111     111                |
|            111        11      |
|            111       1111     |
|    11111111111111111111111    |
|     1111  111                 |
|           111             1   |
|          111            1111  |
|111111111111111111111111111111 |
| 1111    1111     11           |
|         111 11   111          |
|        1111 1111  111         |
|       1111  1111   111        |
|      1111   111    1111       |
|      1111   111   111111      |
|     1111111 111  111111111    |
|   1111  111111111111111111111 |
|  1111    111111111     1111111|
| 1111     11 1111         1111 |
|111       111111111        11  |
|1       11111111111111         |
|     111111  111  111111       |
|    11111    111   11111       |
|    1111 1111111     111       |
|     11   111111      11       |
|            111                |

旋转90度:

|     11          1            |
|      11        11            |
|      111       11      11    |
|       111      11      11    |
|  11   111      11   1  11    |
| 1111   111      1  11  11    |
| 1111    1111    1  11  11    |
|  111     1111   1  11   1    |
|   111    11111  1  11   1    |
|  1 11   111111111   1   1    |
| 11 1111111  111111  1   1    |
| 11  111111   11111111   1    |
|111  11 11      11111111111   |
|1111111111111111 1 11111111111|
|1111111111111111 1   111111111|
| 11111111111111  1   1   1 111|
|     11111   11  1   1   1  1 |
|     11 11       1   1   1    |
|    111 111    111   1   1    |
|   111   111  1111   1   1    |
|   111   1111111 1   1   1    |
|  1111   111111  1   1   1    |
| 1111    11111   1   11  1    |
| 1111    1111    1   111 1    |
|        1111     1   111 11   |
|        111      11  11  111  |
|       1111      11  1   111  |
|      1111       111     11   |
|      1111       11      1    |
|       111       1            |
|        1                     |

旋转-90:

|                     1        |
|            1       111       |
|    1      11       1111      |
|   11     111       1111      |
|  111   1  11      1111       |
|  111  11  11      111        |
|   11 111   1     1111        |
|    1 111   1    1111    1111 |
|    1  11   1   11111    1111 |
|    1   1   1  111111   1111  |
|    1   1   1 1111111   111   |
|    1   1   1111  111   111   |
|    1   1   111    111 111    |
|    1   1   1       11 11     |
| 1  1   1   1  11   11111     |
|111 1   1   1  11111111111111 |
|111111111   1 1111111111111111|
|11111111111 1 1111111111111111|
|   11111111111      11 11  111|
|    1   11111111   111111  11 |
|    1   1  111111  1111111 11 |
|    1   1   111111111   11 1  |
|    1   11  1  11111    111   |
|    1   11  1   1111     111  |
|    11  11  1    1111    1111 |
|    11  11  1      111   1111 |
|    11  1   11      111   11  |
|    11      11      111       |
|    11      11       111      |
|            11        11      |
|            1          11     |

以字型为例,一维表示的二维数组矩阵,旋转90、-90相关推荐

  1. 让一维指针指向二维数组空间的方法!

    背景:int *p;int a[10][10];如何让一维指针p指向a[10][10]开辟的内存空间? 正确的方法: 1.开始我用的笨方法是另外开辟一个内存空间int*p=new int [100]; ...

  2. oracle 一维数转二维数组,js将一维数组转化为二维数组

    遇到的问题: 后端返回的是一组一维数组,但是需要展示的格式是二维数组,常见的场景举例:后台返回10个长度的数组,需要分成3个一组展示在banner上. 例:[1,2,3,4,5,6,7,8,9,10] ...

  3. 【千字过程分析】剑指 Offer 04. 二维数组中的查找

    立志用最少的代码做最高效的表达 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数 ...

  4. 一维数组和二维数组矩阵乘法

    #include <iostream> using namespace std; int c[3][2]={0}; int d[6]={0}; //二维数组存储矩阵乘法 void mult ...

  5. mysql二维数据转一维存_二维数组转一维数组

    //二维转一维 var arr=[ [1,2,3], [2,5,6,7], [234,234,545] ] function dir(arr) { var result=[]; for(var r=0 ...

  6. Java 中的一维数组以及二维数组(8千字零基础超全详解)

    文章目录 前言 一.一维数组 1. 数组的初始化 1.1 动态初始化一 1.2 动态初始化二 1.3 静态初始化 2. 数组使用的注意事项和细节 3. 经典例题 4. 数组赋值机制(重难点!) 5. ...

  7. C语言 一维数组叠加为二维数组样例

    这里参看memcpy的用法,将一个一维整型数组不停的叠加为二维数组 使用宏定义来控制二维数组的行列 代码如下: #include <stdio.h> #include <stdlib ...

  8. JAVA中一维数组的作用,JAVA中一维数组和二维数组的定义

    在java中数组被看成是一个对象 在定义数组时,有两种定义方法:int[] a 和int a[]:第二种是C/C++对数组定义方式,对于JAVA建议采用第一种定义方式. 总的原则:任何对象在被调用之前 ...

  9. 二维数组,锯齿数组和集合 C# 一维数组、二维数组(矩形数组)、交错数组(锯齿数组)的使用 C# 数组、多维数组(矩形数组)、锯齿数组(交叉数组)...

    二维数组,锯齿数组和集合 一.二维数组 二维数组: 一维数组----豆角 二维数组----表格 定义: 1.一维数组: 数据类型[] 数组变量名 = new 数据类型[数组长度]; 数据类型[] 数组 ...

  10. 【C语言】数组的基本知识详细讲解(一维数组、二维数组、越界、存储.....

    接着上次的操作符的详解,让我们来简单了解C语言里的数组. 目录 一维数组的创建和初始化 一维数组的使用 一维数组的存储 二维数组的创建与初始化 二维数组的存储 数组的越界 总结 一维数组的创建和初始化 ...

最新文章

  1. python好学吗 老程序员-想自学程序员,朋友推荐了python,靠谱吗?
  2. 几种字符串加密解密的方法
  3. python:继承日志模块生成自定义日志
  4. 正义联盟的Spring靴
  5. 基准风险因子暴露度_具有性能基准SQL Server索引填充因子
  6. C语言判断逆反素数,判断素数的几种方法思考[C语言]
  7. 王晓耕老师-风险管理专家
  8. progress进度条滚动动画
  9. 泰康和百度智能云为何相互需要?
  10. Realtime Multi-Person 2D Pose Estimation Using Part Affinity Fields【菜鸟读者】
  11. 富文本编辑器(超简单的)
  12. poj3253切割木板(哈夫曼树) 贪心【优先队列】
  13. 这50款必看医疗APP 或许就是下一个风口 (上)
  14. dlp型3d打印机_DLP3D打印机的工作原理及优势
  15. python红楼梦人物词频统计_通过数据挖掘能分析《红楼梦》各回的真伪吗?
  16. 1969年图灵奖--马文·明斯基生平
  17. 企业微信单点登陆流程
  18. SQL语句汇总(终篇)—— 表联接与联接查询
  19. 程序员团队名称和口号_第四季度团队口号励志标语大全
  20. 插件 - 收藏集 - 掘金

热门文章

  1. 计算机第四次评估报告,建议置顶,天天那么多问计算机的。看看第四轮评估的结果。...
  2. fastjson 序列化 不包括转义字符_fastjson漏洞复现
  3. xgboost算法_Xgboost调参小结
  4. java初始堆建议值_Java堆初始大小的建议值
  5. linux c语言播放midi,C语言实现--计算MIDI音符的频率
  6. golang ide 环境搭建_golang环境搭建
  7. hololens与混合现实开发pdf_增强现实与虚拟现实:过去和未来
  8. ajax php断点调试,关于javascript:如何在jquery ajax调用期间调试php
  9. mysql show profiles 使用分析sql 性能
  10. ASP.NET与MVC架构区别总结