嵌入式 hi3518cSDL_tff库做bmp实现osd

转载 2013年12月02日 14:55:08

配置freetype:

xy@xy-pc:~/aaa/freetype-2.4.10$CC=arm-hisiv200-linux-gcc ./configure --prefix=/home/xy/aaa/bin--host=arm-linux

编译安装:make ,makeinstall。

配置SDL:

xy@xy-pc:~/aaa/SDL-1.2.15$CC=arm-hisiv200-linux-gcc CXX=arm-hisiv200-linux-cpp ./configure--prefix=/home/xy/aaa/bin --host=arm-linux --disable-alsa--disable-pulseaudio

编译安装。

make

make install


配置SDL_tff:

xy@xy-pc:~/aaa/SDL_ttf-2.0.11$CC=arm-hisiv200-linux-gcc./configure --with-freetype-prefix=/home/xy/aaa/bin--host=arm-linux

编译安装.


  1. #include
  2. #include
  3. #include "SDL/SDL.h"
  4. #include"SDL/SDL_ttf.h"
  5. int main(int argc,char**argv)
  6. {
  7. TTF_Font *font;
  8. SDL_Surface *text, *temp;
  9. if ( TTF_Init() < 0 ){
  10. fprintf(stderr, "Couldn't initialize TTF:%s\n",SDL_GetError());
  11. SDL_Quit();
  12. return(2);
  13. }
  14. font = TTF_OpenFont("cu.ttf", 48);
  15. if ( font == NULL ){
  16. fprintf(stderr, "Couldn't load %d pt font from %s:%s\n",
  17. "ptsize", 18,SDL_GetError());
  18. }
  19. //TTF_SetFontStyle(font, 0);
  20. // TTF_SetFontOutline(font, 0);
  21. //TTF_SetFontKerning(font, 1);
  22. // TTF_SetFontHinting(font, 0);
  23. //SDL_Color forecol= { 0xFF, 0xFF, 0xFF, 0};
  24. SDL_Color forecol= { 0x00, 0x00, 0x00, 0 };
  25. char*string="你好啊";
  26. text = TTF_RenderUTF8_Solid(font, string,forecol);
  27. //SDL_LoadBMP
  28. SDL_SaveBMP(text, "1.bmp");
  29. SDL_FreeSurface(text);
  30. TTF_CloseFont(font);
  31. TTF_Quit();
  32. }
#include 
#include 
#include "SDL/SDL.h"
#include "SDL/SDL_ttf.h"


int main(int argc,char **argv)
{
        TTF_Font *font;
        SDL_Surface *text, *temp;

         
         if ( TTF_Init() < 0 ) {
                 fprintf(stderr, "Couldn't initialize TTF: %s\n",SDL_GetError());
                 SDL_Quit();
                 return(2);
         }


        font = TTF_OpenFont("cu.ttf", 48);
        if ( font == NULL ) {
                fprintf(stderr, "Couldn't load %d pt font from %s: %s\n",
                                        "ptsize", 18, SDL_GetError());
        }

//      TTF_SetFontStyle(font, 0);
//      TTF_SetFontOutline(font, 0);
//      TTF_SetFontKerning(font, 1);
//      TTF_SetFontHinting(font, 0);

        //SDL_Color forecol=     { 0xFF, 0xFF, 0xFF, 0 };
        SDL_Color forecol=       { 0x00, 0x00, 0x00, 0 };
        char *string="你好啊";
        text = TTF_RenderUTF8_Solid(font, string, forecol);

        //SDL_LoadBMP

        SDL_SaveBMP(text, "1.bmp");




        SDL_FreeSurface(text);
        TTF_CloseFont(font);
        TTF_Quit();

}

就可以保存成1.bmp了。输入了汉字。代码保存的文本格式应该utf-8.



对于海思3520a用的是rgb1555格式,所以应该转成那种格式:

  1. SDL_Surface *temp =SDL_CreateRGBSurface(SDL_SWSURFACE,
  2. text->w, text->h, 16,\
  3. 0x00FF0000, 0x0000FF00, 0x000000FF,
  4. 0);
  5. SDL_Rect bounds;
  6. if (temp !=NULL)
  7. {
  8. bounds.x = 0;
  9. bounds.y = 0;
  10. bounds.w = text->w;
  11. bounds.h = text->h;
  12. if (SDL_LowerBlit(text,&bounds, temp, &bounds) < 0) {
  13. SDL_FreeSurface(text);
  14. SDL_SetError("Couldn't convert image to 16bpp");
  15. text = NULL;
  16. }
  17. }
  18. stBitmap.u32Width = temp->w;
  19. stBitmap.u32Height = temp->h;
  20. stBitmap.pData= temp->pixels;
  21. stBitmap.enPixelFormat= PIXEL_FORMAT_RGB_1555;
  22. SDL_FreeSurface(text);
  23. SDL_FreeSurface(temp);
       
        SDL_Surface *temp = SDL_CreateRGBSurface(SDL_SWSURFACE,
                        text->w, text->h, 16,\
                                                0x00FF0000, 0x0000FF00, 0x000000FF,
                                                0);
        SDL_Rect bounds;
        if (temp != NULL)
        {
                bounds.x = 0;
                bounds.y = 0;
                bounds.w = text->w;
                bounds.h = text->h;
                if (SDL_LowerBlit(text, &bounds, temp, &bounds) < 0) {
                        SDL_FreeSurface(text);
                        SDL_SetError("Couldn't convert image to 16 bpp");
                        text = NULL;
                }
        }
        stBitmap.u32Width = temp->w;
        stBitmap.u32Height = temp->h;
        stBitmap.pData= temp->pixels;
        stBitmap.enPixelFormat= PIXEL_FORMAT_RGB_1555 ;
        SDL_FreeSurface(text);
        SDL_FreeSurface(temp);

添加以上代码,基本就可以达到了。

 

Hi3516a平台实现osd文字处理

由于Hi3516a平台在实现osd文字处理的时候,不支持动态添加时间戳。比较常用的方法是采用freetype、SDL、SDl_ttf这个三个开源库,配合region(区域管理)方式实现文字叠加。本文主...
  • qq328848298
  • qq328848298
  • 2017年06月27日 21:04
  • 500

bmp data for OSD

海思方案的OSD叠加是通过bmp位图数据来实现,如何由asc码或者中文字符动态生成bmp数据呢? 1、工具:SDL_ttf 2、SDL_ttf简介 SDL本身没有显示文字功能,它需要用扩展库SD...
  • u013286409
  • u013286409
  • 2015年03月31日 18:03
  • 1007

对视频图像进行OSD叠加

频叠加就是将图片和文字信息叠加到视频信号中,如电视台的LOGO,电影的字幕,电视机的菜单,都是通过视频叠加的形式显示在视频图像中的。区别于用于专业影视编辑行业的字幕叠加器,字符叠加器这一名称现在更加习...
  • ymj321
  • ymj321
  • 2017年03月08日 16:47
  • 1577

海思3518e OSD开发

目前我要在3518E上面做个OSD,叠加时间上去,主要的开发有两种方式: 一种是获取时间字符串,通过第三方库提供的接口将时间字符串转化为bmp格式位图,然后利用SDK中提供的demo直接进行转化 第...
  • wangweiqiang1325
  • wangweiqiang1325
  • 2017年03月14日 19:01
  • 1725

VIDEO视频OSD输出模块的理解

这里的OSD是通过I2C命令,把点阵字模一个点定义为一个字节,送到FPGA的RAM中,再由FPGA根据输出时序进行显示。字符OSD显示在最上面层上。 module osd( input v...
  • USB_ABC
  • USB_ABC
  • 2016年10月04日 19:35
  • 1301

qt界面叠加视频OSD双层显示

最终代码存放于 http://download.csdn.net/detail/lzh445096/8849147 本人负责的是UI界面,提供给底层应用程序接口函数,此接口函数功能为向指定路径的文件...
  • lzh445096
  • lzh445096
  • 2015年07月04日 13:43
  • 2400

ceph存储 ceph-deploy部署挂载目录的osd

 a, 一个ceph cluster至少需要1个mon节点和2个osd节点才能达到active + clean状态(故osd pool default size得>=2, 注意:如果不想复制的话...
  • skdkjxy
  • skdkjxy
  • 2016年05月12日 16:12
  • 4925

Ceph-智能分布CRUSH之Object与PG与OSD

Ceph  智能分布CRUSH Ceph CRUSH算法(Controlled Replication Under ScalableHashing) 一种基于为随机控制数据分布、复制的算法。 基本原理...
  • qq_23348071
  • qq_23348071
  • 2017年04月20日 17:19
  • 943

做onvif时遇到设置osd的问题

  • zjf535214685
  • zjf535214685
  • 2017年04月17日 10:28
  • 547

Pixhawk OSD二次开发,实现界面定制

目前市面所有的飞控osd模块都是起源于google上的minimosd项目。该项目版本截止于12年的2.0。其硬件解决方案是采用atmega328芯片作为主控,配置相当于arduino nano,具有...
  • Gen_Ye
  • Gen_Ye
  • 2016年08月07日 15:30
  • 5702
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:嵌入式 hi3518cSDL_tff库做bmp实现osd
举报原因:
原因补充:

(最多只允许输入30个字)