海思OSD开发系列(一) SDL_TTF框架移植
需求
在海思OSD显示,就是在region叠方块,我们常用的需求就是叠加 时间戳、通道名称、log等,做的好一点的可以实现二维码扫描方块显示、天气信息等等;
需求里就两类信息,一种字符、一种图片,最后的实现其实都一样,通通转成位图bmp叠上去就ok;
今天我们要做的就是搞字体;
字体
-
点阵式字体 安防领域,传统使用点阵式字体,顾名思义就是打点成像,跟老式的针式打印机一个道理; 优点是字体小、所需资源少,适合内存和flash紧张的低端嵌入式设备; 举栗:hzk16、asc16
-
系统字体 这种就和我们操作系统上用的一样,UI都用它,漂亮光滑细腻… 举栗:wqy-microhei.ttc(文泉驿_微米黑) 为什么选他? 开源、自由、免费、漂亮…
为什么要用SDL_TTF
讲这么多,都没到正主,SDL是什么,SDL是一套开源多媒体框架,很多地方用来做播放器显示等相关的功能,我们要用到的SDL_TTF,顾名思义就是这个框架的字体模块 复习下前面讲的:
- 我们需要显示文字并选择了NB的字体
- 海思需要位图来叠osd 这个两个加在一起就是,我们需要一个将字体转换成位图工具来制作位图使用osd模块显示! 这个工具就是SDL_TTF!
啰嗦一大堆,不要再问我为甚要搞这个了!也因为这个实现很快,三个小时就可以搞定;
当然还有更简单也更复杂的方式,把时间位图格式数据转成多维数组载入在内存里面,每次只修改变化的数据,这样就全用代码实现了;提供思路给大家参考
下载
CSDN同学分享,交友网站下载github 整包,版本有点老,但好像也没影响
也可以官网自行下载freetype、SDL1、SDL_ttf这三个版本
freetype官网 下载Freetype-2.9
这里以github资源为例
交叉编译
编译freeType和SDL依赖
解压使用相同配置
./configure CC=aarch64-himix100-linux-gcc --host=arm-linux --prefix=$PWD/ARM_INSTALL
make -j99; make install 在INSTALL目录会生成我们需要的LIB和头文件
SDL_TTF编译 –with-sdl-prefix –with-freetype-prefix -with-freetype-exec-prefix 这里指定依赖,就是我们上一步刚刚编译好的目录 最好换成绝对路径 配置选项如下
./configure CC=aarch64-himix100-linux-gcc --host=arm-linux --prefix=$PWD/ARM_INSTALL --with-sdl-prefix=../SDL-1.2.15/ARM_INSTALL --with-freetype-prefix=../freetype-2.4.10/ARM_INSTALL --with-freetype-exec-prefix=../freetype-2.4.10/ARM_INSTALL
make -j99;make install 完成!!! 将include和lib目录拷贝出来就ok!
位图文件测试 主要步骤
- 初始化、打开字体
- 格式转换
- 存文件
#include <stdio.h>
#include "SDL.h"
#include "SDL_ttf.h"
#include<time.h>
int main(int argc, const char *argv[])
{
char * pstr = "2019-11-21 15:40:29";
SDL_PixelFormat *fmt;
TTF_Font *font;
SDL_Surface *text, *temp;
if (TTF_Init() < 0 )
{
fprintf(stderr, "Couldn't initialize TTF: %s\n",SDL_GetError());
SDL_Quit();
}
font = TTF_OpenFont("/root/nfs_share/wqy-microhei.ttc", 48);
if ( font == NULL )
{
fprintf(stderr, "Couldn't load %d pt font from %s: %s\n", 48, "ptsize", SDL_GetError());
}
SDL_Color forecol = { 0xff, 0xff, 0xff, 0xff };
text = TTF_RenderUTF8_Solid(font, pstr, forecol);
fmt = (SDL_PixelFormat*)malloc(sizeof(SDL_PixelFormat));
memset(fmt,0,sizeof(SDL_PixelFormat));
fmt->BitsPerPixel = 16;
fmt->BytesPerPixel = 2;
fmt->colorkey = 0xffffffff;
fmt->alpha = 0xff;
temp = SDL_ConvertSurface(text, fmt, 0);
SDL_SaveBMP(temp, "save.bmp");
SDL_FreeSurface(text);
SDL_FreeSurface(temp);
TTF_CloseFont(font);
TTF_Quit();
return 0;
}
结果
BMP图片式样
OSD叠加式样
本文链接:https://blog.csdn.net/haysonzeng/article/details/106670568
相关推荐:
- 分享
- 举报

-
2020-08-03 19:07:53
-
浏览量:367次2020-08-04 20:15:40
-
浏览量:336次2020-04-21 20:27:00
-
浏览量:421次2020-04-21 20:28:40
-
浏览量:1362次2018-09-04 15:41:09
-
浏览量:854次2018-06-27 10:20:05
-
浏览量:1041次2019-12-16 13:54:11
-
浏览量:529次2020-07-31 13:45:09
-
浏览量:365次2020-08-03 11:18:53
-
浏览量:444次2018-09-25 19:01:04
-
浏览量:383次2020-08-04 20:24:33
-
浏览量:574次2020-08-03 11:10:18
-
浏览量:1987次2018-06-14 23:13:10
-
浏览量:569次2020-08-03 14:27:03
-
浏览量:492次2020-08-04 20:30:30
-
浏览量:419次2020-07-31 11:54:44
-
浏览量:770次2018-04-22 20:46:42
-
浏览量:377次2020-08-04 20:08:51
-
浏览量:460次2020-08-05 20:32:31
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖

哗啦啦~







举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明