hi3516 freetype sdl
https://download.videolan.org/contrib/freetype2/freetype-2.4.10.tar.gz
~/cpp/3rdpart
CFLAGS += -I/root/paho.mqtt.c/src
MPI_LIBS += /usr/local/lib/libpaho-mqtt3c.so.1
CFLAGS += -I/usr/local/include/freetype2/freetype
MPI_LIBS += /usr/local/lib/libfreetype.so.6
CFLAGS += -I/usr/local/include/SDL
MPI_LIBS += /usr/local/lib/libSDL-1.2.so.0
CFLAGS += -I/usr/local/include/
MPI_LIBS += /usr/local/lib/libSDL_ttf-2.0.so.0
关于使用Hi3516等平台
在实现osd文字处理的时候
除了官方的HiFB文档方式处理
另一种处理方式就是用第三方函数库:freetype+SDL+SDL_ttf
然后配合region(区域管理)方式 实现文字叠加
这里主要讨论freetype、SDL、SDl_ttf这些库的安装及使用,关于region叠加处理请参考:
首先,是函数库源码包下载,各位可以去官网下载
(要注意源码包的版本兼容,我在编译函数库时就出现了freetype与SDL库的某些版本在一起无法编译的问题)
有需要的朋友 可以直接从我的附件中下载 经过试验可以确保 源码可用可编译移植;
接下来,下载好源码按照以下步骤 安装:
(注:目前建议全部安装默认路径,切换路径要注意逻辑关系,待后续更新)
1、freetype安装:
aria2c -c -x 16 http://download.savannah.gnu.org/releases/freetype/freetype-2.4.10.tar.gz
tar -xvf freetype***.tar.bz2 解压
进入 cd freetype文件目录
执行./configure CC=arm-himix200-linux-gcc --host=arm-himix200-linux
make
make install
注:若安装成功则会在 /usr/local/目录下生成 bin、lib、include、share四个文件夹并且内部有相关文件;
2、SDL安装:
tar -xvf SDL-***.tar.gz 解压
进入SDL文件目录
执行./configure CC=arm-isiv300-linux-gcc --host=arm-himix200-linux
make
make install
注:若安装成功后将会在usr/local/目录下的bin、lib、include、share目录下生成相应文件
3、SDL_ttf安装:
tar -xvf SDL_ttf-***.tar.gz 解压
进入SDL_ttf文件目录
执行./configure CC=arm-himix200-linux-gcc --host=arm-himix200-linux
make
make install
注:若安装成功后将会在 usr/local/ 目录下的bin、lib、include、share目录下生成相应文件
NOTE:
若以上均安装成功,则在 usr/local 目录下存在如下文件
执行 tree -L 2
.
├── bin
│ ├── freetype-config
│ └── sdl-config
├── include
│ ├── freetype2
│ ├── ft2build.h
│ └── SDL
├── lib
│ ├── libfreetype.a
│ ├── libfreetype.la
│ ├── libfreetype.so -> libfreetype.so.6.9.0
│ ├── libfreetype.so.6 -> libfreetype.so.6.9.0
│ ├── libfreetype.so.6.9.0
│ ├── libSDL-1.2.so.0 -> libSDL-1.2.so.0.11.4
│ ├── libSDL-1.2.so.0.11.4
│ ├── libSDL.a
│ ├── libSDL.la
│ ├── libSDLmain.a
│ ├── libSDLmain.la
│ ├── libSDL.so -> libSDL-1.2.so.0.11.4
│ ├── libSDL_ttf-2.0.so.0 -> libSDL_ttf-2.0.so.0.10.1
│ ├── libSDL_ttf-2.0.so.0.10.1
│ ├── libSDL_ttf.a
│ ├── libSDL_ttf.la
│ ├── libSDL_ttf.so -> libSDL_ttf-2.0.so.0.10.1
│ └── pkgconfig
└── share
├── aclocal
└── man
最后,将 include 和 lib( libSDL.so, libSDL_ttf.so, libfreetype.so) 拷贝到相应的应用工程的目录中 并修改Makefile规则 进行编译调试
NOTE: 在板卡执行时,要把 libfreetype.so.6 libSDL-1.2.so.0 libSDL_ttf-2.0.so.0 拷贝到板卡 /lib 目录下。
freetype+SDL+SDL_ttf简介
FreeType2是一个简单的跨平台的字体绘制引擎
SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。
SDL_ttf是TrueType字体渲染库,使用SDL库,几乎一样的便携。这取决于FreeType2处理TrueType字体数据。它允许程序员使用多个TrueType字体无需代码的字体渲染程序本身。随着轮廓字体和反走样的力量,高质量的文本输出可以毫不费力的获得。
##0/源码下载
下面三个包,可以从我的资源下载,也可以在网上找.
据说三个库不匹配会出问题,你懂得,出了问题改起来很麻烦的.
linux@ubuntu:~/tmp/sdl$ ls
freetype-2.4.10.tar.gz SDL-1.2.15.tar.gz SDL_ttf-2.0.11.tar.gz
1
2
3
4
1/freetype安装:
tar -xvf freetype***.tar.bz2 解压
进入freetype文件目录
执行./configure --host=arm-himix200-linux
make
make install
//ATTENTION:一定要注意安装成功一个库才能安装下一个库
##2/修改freetype的头文件
上述命令敲击过后,会在/usr/local/目录下
生成bin目录
生成include目录
生成lib目录
而我们要做的是 3/SDL安装: 4/SDL_ttf安装: 5/创建demo ##6/编译 /编译选项/ 资源下载 #### char strings[32] = stBitmap[i].u32Width = temp->w; s32Ret = HI_MPI_RGN_SetBitMap(i, &(stBitmap[i])); 我采用的方式是利用sdl+freetype生成字符图像,然后将图像的像素赋值给stBitmap.pData,再调用HI_MPI_RGN_SetBitMap来添加osd 其中设置字体颜色的变量是SDL_Color,按RGBA的格式设置 这里有一点要注意的是,(不清楚海思开发人员是如何编写HI_MPI_RGN_SetBitMap的字体叠加逻辑的) { 0x7f, 0xff, 0x00, 0xff }, 这是两个SDL_Color的值,按第一个设置的话,字体镂空,字体的空隙被设定像素填充 按第二个设置的话,字体空隙镂空,字体被设定像素填充(一般情况,这才是我们想要的效果) 也就是说字体镂空还是字体空隙镂空取决于RGBA的第一个分量R的值,如果R大于等0x80则字体空隙镂空,否则的话则字体镂空 这一点海思竟然没有在开发文档中标明,这也提醒各位开发者们,自己开发的产品,一定要有写文档的习惯,不要给其他开发者留下不必要的坑。 我的虚拟机是 Ubuntu 14.04,那首先移植 freetype+SDL+SDL_ttf 这三个库。 编译安装后哦 生成文件在 /usr/local/include,lib.share,bin 四个目录中 一、库移植 freetype下载 https://download.videolan.org/contrib/freetype2/ 2、安装 解压: # tar -xvf freetype-2.4.10.tar.gz ###(2)SDL下载安装 SDL下载 https://download.videolan.org/contrib/sdl/ 解压: # tar -xvf SDL-1.2.15.tar.gz 出现问题1: ./src/audio/esd/SDL_esdaudio.c:30:17: fatal error: esd.h: 没有那个文件或目录 解决方法1: 编译:make && make install #export LDFLAGS="-L/usr/local/zlib/lib" ./configure CC=arm-hisiv500-linux-gcc --host=arm-linux --prefix=/usr/share/arm-libpng LDFLAGS=-L/usr/share/arm-zlib/lib ###(3)SDL_ttf下载安装 SDL_ttf下载 2、安装 解压: # tar -xvf SDL_ttf-2.0.11.tar.gz 注意:将上面的 – 改为两个 -- 这是CSDN编译器的bug!! MPI_LIBS += $(REL_LIB)/libSDL.a 二、测试 mkdir /opt/sdl_lib (2)编写测试程序 (3)编译 CFLAGS=-I/opt/sdl_lib/include -I/opt/sdl_lib/include/SDL -L/opt/sdl_lib/lib arm-himix200-linux-gcc -Iinclude -Iinclude/libpng16/ -Iinclude/freetype2/ -Iinclude/SDL -lpthread -lm -o test test.c -Wl,--start-group ${PWD}/lib/libz.a ${PWD}/lib/libpng16.a ${PWD}/lib/libfreetype.a ${PWD}/lib/libSDL.a ${PWD}/lib/libSDL_ttf.a -Wl,--end-group
1/修改/usr/local/include/ft2build.h文件 56行
#include
2/修改/usr/local/include/freetype2/freetype/config/ftheader.h文件,全篇
在底行模式下键入
%s/freetype/freetype2\/freetype/g
3/修改/usr/local/freetype2/freetype/config/ftheader.h文件,173行
#define FT_FREETYPE_H
tar -xvf SDL-***.tar.gz 解压
进入SDL文件目录
执行./configure --host=arm-himix200-linux
make
make install
//ATTENTION:一定要注意安装成功一个库才能安装下一个库
tar -xvf SDL_ttf-***.tar.gz 解压
进入SDL_ttf文件目录
执行./configure --host=arm-himix200-linux
make
make install
//ATTENTION:一定要注意安装成功
/test.c/#include<stdio.h>
#include "SDL/SDL.h"
#include "SDL/SDL_ttf.h"
int main(int argc, const char *argv[])
{
char * pstr = "hello";
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("./simhei.ttf", 48);
if ( font == NULL )
{
fprintf(stderr, "Couldn't load %d pt font from %s: %s\n",18,"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;
}
gcc test.c -lSDL -lSDL_ttf -Wl,-rpath,/usr/local/lib
编译正常且运行正常的前提是所有的动态库都默认装在了/usr/local/目录下
且目录下有个simhei.ttf文件
当然,也可以看我的demo,点击资源下载标题就可以了
————————————————
版权声明:本文为CSDN博主「__pop_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011011827/article/details/58709139
/**********sdl********/
TTF_Font *font;
SDL_PixelFormat *fmt;
SDL_Surface *text;
SDL_Surface *temp;
if (TTF_Init() < 0)
{
fprintf(stderr, "Couldn't initialize TTF:%s\n", SDL_GetError());
SDL_Quit();
return -1;
}
font = TTF_OpenFont("./simhei.ttf", 16);
if (NULL == font)
{
fprintf(stderr, "Couldn't load %d pt font from %s:%s\n", 18, "ptsize", SDL_GetError());
return -2;
}
{
"HIDE MENU ",
"FOCUS AUTO ",
"ROI OFF ",
"FBL OFF ",
"BRIGHT 0 ",
"EXPMODE AUTO ",
"WBMODE AUTO ",
"SHARP 4 ",
"DEFAULT OFF ",
"GAMMA 1 ",
"FRAMERATE 1080P30"
};
SDL_Color forecol[11] =
{
{ 0xff, 0x00, 0x00, 0xff },
{ 0x80, 0xff, 0x00, 0xff },
{ 0x80, 0xff, 0x00, 0xff },
{ 0x80, 0xff, 0x00, 0xff },
{ 0x80, 0xff, 0x00, 0xff },
{ 0x80, 0xff, 0x00, 0xff },
{ 0x80, 0xff, 0x00, 0xff },
{ 0x80, 0xff, 0x00, 0xff },
{ 0x80, 0xff, 0x00, 0xff },
{ 0x80, 0xff, 0x00, 0xff },
{ 0x80 0xff, 0x00, 0xff }
};
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;
for (i = 0; i < 8; i++)
{
text = TTF_RenderUTF8_Solid(font, strings[i], forecol[i]);
temp = SDL_ConvertSurface(text, fmt, 0x00);
//SDL_SaveBMP(temp, "save.bmp");
//printf("temp->w:%d\n", temp->w);
stBitmap[i].u32Height = temp->h;
//printf("temp->h:%d\n", temp->h);
stBitmap[i].pData = temp->pixels;
stBitmap[i].enPixelFormat = PIXEL_FORMAT_RGB_1555;
if (s32Ret != HI_SUCCESS)
{
printf("HI_MPI_RGN_SetBitMap failed with %#x!\n", s32Ret);
return s32Ret;
}
{ 0x80, 0xff, 0x00, 0xff },
————————————————
版权声明:本文为CSDN博主「没有你的夜001」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_26671365/article/details/79007066海思osd+freetype+SDL+SDL_ttf字体颜色。
###(1)freetype下载安装
1、下载
选择下载版本为: freetype-2.4.10.tar.gzaria2c -c -x 16 http://download.savannah.gnu.org/releases/freetype/freetype-2.4.10.tar.gz
进入freetype文件目录: # cd freetype-2.4.10
执行: # ./configure CC=arm-himix200-linux-gcc --host=arm-himix200-linux --prefix=${PWD}/../output --enable-shared=no
编译:make && make install
1、下载
选择下载版本:SDL-1.2.15.tar.gzaria2c -c -x 16 https://download.videolan.org/contrib/sdl/SDL-1.2.15.tar.gz
2、安装
进入SDL文件目录: # cd SDL-1.2.15/
执行: CC=arm-himix200-linux-gcc ./configure --host=arm-himix200-linux --prefix=${PWD}/../output --enable-shared=no
进入SDL目录:
./configure CC=arm-hisiv500-linux-gcc --host=arm-hisiv500-linux --disable-alsa --disable-pulseaudio --enable-esd=no --prefix=/opt/sdl/install
加上--enable-esd=no,这个错误好像是音频相关的错误,这里直接关掉音频。zlib
git clone https://github.com/madler/zlib.git -b v1.2.11 --depth=1
CHOST=arm-himix200-linux ./configure --static --prefix=${PWD}/../output
make
编译libpng16 已经编译过的请看第三步;
aria2c -c -x 16 http://ftp-osl.osuosl.org/pub/libpng/src/libpng16/libpng-1.6.34.tar.gz
下载好libpng源码后,解压&&进入到源码目录;
执行:CPPFLAGS=-I${PWD}/../output/include LDFLAGS=-L${PWD}/../output/lib CC=arm-himix200-linux-gcc ./configure --host=arm-himix200-linux --with-zlib-prefix=${PWD}/../output --prefix=${PWD}/../output --enable-shared=no
#export CPPFLAGS="-I/usr/local/zlib/include"
然后修改Makefile添加zlib的头文件目录,configure上加头文件Makefile中也不会自动加,所以要改下;
DEFAULT_INCLUDES = -I. -I/usr/share/arm-zlib/include
make
sudo make install
1、下载aria2c -c -x 16 https://www.libsdl.org/projects/SDL_ttf/release/SDL_ttf-2.0.11.tar.gz
选择下载版本:SDL_ttf-2.0.11.tar.gz
进入SDL_ttf文件目录: # cd SDL_ttf-2.0.11/
执行: # ./configure CC=arm-himix200-linux-gcc --host=arm-himix200-linux --with-freetype-prefix=--prefix=${PWD}/../output --with-sdl-prefix=${PWD}/../output --prefix=${PWD}/../output --enable-shared=no
执行: # ./configure CC=arm-himix200-linux-gcc --host=arm-himix200-linux --with-freetype-prefix=/usr/local/ --with-sdl-prefix=/usr/local/
编译: make && make install
MPI_LIBS += $(REL_LIB)/libSDL_ttf.a
MPI_LIBS += $(REL_LIB)/libfreetype.a
如果静态编译还要加上
MPI_LIBS += $(REL_LIB)/libz.a
(1)拷贝生成sdl库
cd /opt/sdl_lib
cp /usr/local/include/ ./ -rf
cp /usr/local/lib/ ./ -rf/************************************************************
File Name: test.c
Created Time: 2017年02月28日 星期二 21时47分05秒
************************************************************/
#include <stdio.h>
#include "SDL.h"
#include "SDL_ttf.h"
int main(int argc, const char *argv[])
{
char * pstr = "hello";
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("./simhei.ttf", 48);
if ( font == NULL )
{
fprintf(stderr, "Couldn't load %d pt font from %s: %s\n",18,"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;
}
arm-himix200-linux-gcc test.c $(freetype-config --cflags --libs) $(sdl-config --cflags --libs) -lSDL_ttf -Wl,-rpath -o test
arm-himix200-linux-gcc test.c -Llib -Iinclude -Iinclude/libpng16/ -Iinclude/freetype2/ -Iinclude/SDL -l${PWD}/lib/libz.a -l${PWD}/lib/libpng16.a -l${PWD}/lib/libfreetype.a -l${PWD}/lib/libSDL.a -l${PWD}/lib/libSDL_ttf.a -Wl,-rpath -o test
arm-himix200-linux-gcc test.c -Llib -Iinclude -Iinclude/libpng16/ -Iinclude/freetype2/ -Iinclude/SDL ${PWD}/lib/libz.a ${PWD}/lib/libpng16.a ${PWD}/lib/libfreetype.a ${PWD}/lib/libSDL.a ${PWD}/lib/libSDL_ttf.a -Wl,-rpath -o test
arm-himix200-linux-gcc test.c -Llib -Iinclude -Iinclude/libpng16/ -Iinclude/freetype2/ -Iinclude/SDL libz -lpng16 -lSDL_ttf -lfreetype -lSDL-lpthread -Wl,-rpath -o test
@$(CC) $(CFLAGS) -lpthread -lm -o $@ $^ -Wl,--start-group $(MPI_LIBS) $(SENSOR_LIBS) $(AUDIO_LIBA) $(REL_LIB)/libsecurec.a -Wl,--end-group