使用SDL2_ttf绘制文字

- 先下载sdl2_ttf的库,关于如何使用这个库的很多,我只是在说绘制的流程,及那一点的小思想
- 绘制过程:渲染视频------------>渲染文字
- 注意:SDL2_ttf不是多线程安全
//由于我播放的是多路相机的视频,涉及到多线程,但SDL2_ttf引擎不支持多线程安全,所以采取了互斥量控制,
//使sdl播放线程串行化
int status = 0;
CMutex g_sdl_mutex;
void sdl::play(unsigned char*buffer,int buffSize,int&_frameWidth,int&_frameHeight)
{
//如果其他线程在播放,就等待,确保线程串行化while (status == 1)Sleep(10);if (buffSize == 0)return;g_sdl_mutex.Lock();status = 1;//myMutex.Lock();if (this->isNotFirst== false){//自适应图像分辨率sdlTexture = SDL_CreateTexture(sdlRenderer,SDL_PIXELFORMAT_IYUV,SDL_TEXTUREACCESS_STREAMING,_frameWidth,_frameHeight);isNotFirst = true;}//获取窗口大小,自适应CWnd *myPic=CWnd::FromHandle((HWND)win);CRect myPicRect;myPic->GetClientRect(&myPicRect);sdlrect.x=0;sdlrect.y=0;sdlrect.w=myPicRect.Width();sdlrect.h=myPicRect.Height();
//更新视屏缓冲到SDL
SDL_UpdateTexture( sdlTexture, NULL,buffer, _frameWidth);
//SDL_SetVideoMode()
//<-------------第一步渲染视频----------------------------->SDL_RenderCopyEx(sdlRenderer,sdlTexture,NULL,&sdlrect,0,NULL,SDL_FLIP_NONE);//绘制文字回调if(sdl_draw_text!=NULL){if (ttf_err != -1){sdl_draw_text(&sdl_text);SDL_Color color = { 255,0,0 };color.r=sdl_text.color.r;color.b=sdl_text.color.b;color.g=sdl_text.color.g;//<------------------绘制文字部分------------------------------------>TTF_Font* font = TTF_OpenFont("simhei.ttf", sdl_text.wordSize);if (font == NULL){AfxMessageBox(_T("获取字体失败"));font = NULL;}if (font != NULL){//TTF_Init();//我的工程使用的是UNICODESDL_Surface*textSurf=TTF_RenderUNICODE_Solid(font,(Uint16*)cstringToUnicode(sdl_text.text),color);SDL_Surface*dst=SDL_GetWindowSurface(screen);SDL_Texture*pTexture=SDL_CreateTextureFromSurface(sdlRenderer,textSurf);SDL_FreeSurface(textSurf);//往渲染器上copy字体//<-----------------第二步:渲染文字即可----------------------------->SDL_RenderCopyEx(sdlRenderer,pTexture,NULL,&sdlrect,0,NULL,SDL_FLIP_NONE);SDL_DestroyTexture(pTexture);TTF_CloseFont(font);}}}if(sdl_draw_poly!=NULL){for(int i=0;i<sdl_polygons->polyNum;++i){DrawPoly(sdlRenderer,sdl_polygons->sdl_poly[i]);}}//显示SDL_RenderPresent( sdlRenderer );//清理渲染器//SDL_RenderClear( sdlRenderer );   //myMutex.Unlock();//获取帧if (sdl_get_frame != NULL){if (sdl_frame->buffSize < buffSize){AfxMessageBox(_T("帧缓冲过小!"));return;}//获取到帧数据memset(sdl_frame->buff, 0, sdl_frame->buffSize);memcpy(sdl_frame->buff, buffer, buffSize);sdl_frame->frameHeight = _frameHeight;sdl_frame->frameWidth = _frameWidth;//对帧数据做一些处理,回调sdl_get_frame(sdl_frame);}status = 0;g_sdl_mutex.Unlock();
}

SDL2.0--绘制文字相关推荐

  1. [Qt教程] 第13篇 2D绘图(三)绘制文字

    [Qt教程] 第13篇 2D绘图(三)绘制文字 楼主  发表于 2013-4-25 23:04:46 | 查看: 720| 回复: 0 绘制文字 版权声明 该文章原创于Qter开源社区,作者yafei ...

  2. 使用Python,OpenCV进行涂鸦(绘制文字、线、圆、矩形、椭圆、多边形轮廓、多边形填充、箭头~)

    使用Python,OpenCV进行涂鸦(绘制文字.线.圆.矩形.椭圆.多边形轮廓.多边形填充.箭头) 1. 效果图 2. 原理 2.1 绘制线:cv2.line(canvas, (300, 0), ( ...

  3. OpenCV 【十六】RNG随机数发生器putText绘制文字

    1 目的 使用 随机数发生器类 (RNG) 并得到均匀分布的随机数. 通过使用函数 putText 显示文字. 第一步是实例化一个 Random Number Generator(随机数发生器对象) ...

  4. 【Android 应用开发】Canvas 精准绘制文字 ( 文本边界坐标解析 | 绘图位置 )

    文章目录 一.文本边界坐标解析 二.绘图位置 一.文本边界坐标解析 在上一篇博客 [Android 应用开发]Canvas 精准绘制文字 ( 测量文本真实边界 | 将文本中心点与给定中心点对齐 ) 中 ...

  5. 【Android 应用开发】Canvas 绘制文字 ( 文字尺寸测量 | 基线绘制 )

    文章目录 I . 文字尺寸测量 II . 基线绘制 I . 文字尺寸测量 1 . 精准绘制需求 : Canvas 绘制文字时 , 有时需要精准的控制文字的绘制 , 如绘制到指定的区域 , 居中 , 或 ...

  6. qt char*转int_Qt在Linux下绘制文字原理-使用FreeType来绘制字形

    原文链接 Qt源码那些事儿-Qt绘制文字原理_使用FreeType来绘制字形​www.cryfeifei.cn 前言 Qt在Linux绘制字体是使用的FreeType. FreeType是一个用C语言 ...

  7. 微信小程序-canvas绘制文字实现自动换行

    微信小程序-canvas绘制文字实现自动换行 在使用微信小程序canvas绘制文字时,时常会遇到这样的问题:因为canvasContext.fillText参数为 我们只能设置文本的最大宽度,这就产生 ...

  8. OpenCV之core 模块. 核心功能(2)基本绘图 随机数发生器绘制文字 离散傅立叶变换 输入输出XML和YAML文件 与 OpenCV 1 同时使用

    基本绘图 目的 本节你将学到: 如何用 Point 在图像中定义 2D 点 如何以及为何使用 Scalar 用OpenCV的函数 line 绘 直线 用OpenCV的函数 ellipse 绘 椭圆 用 ...

  9. 【Qt】2D绘图之绘制文字

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 基本绘制 04. 使用范围绘制文字 05. 使用字体绘制文字 06. 附录 01. 概述 Qt中除了绘制图形以外,还可以使 ...

  10. TextPaint绘制文字

    TextPaint是paint的子类,用它可以很方便的进行文字的绘制,一般情况下遇到绘制文字的需求时,我们一般用TextPaint所提供的方法.开始学习如何绘制文字之前,我们必须要先了解下androi ...

最新文章

  1. CSE 3100 Systems Programming
  2. 力扣算法题—073矩阵置零
  3. 【Python刷题】_2
  4. 今天写一个关于浮动的页面,页面高度不能设置。用元素将他撑开。
  5. 吴涛 :低延迟传输协议和新Codec将成为热点
  6. SAP Cloud for Customer根据模型某字段进行OData的搜索操作
  7. Employee Assign Organization unit
  8. ABAP package not extensible的原因
  9. 新手指导:51CTO微博小技巧
  10. 【Pre蓝桥杯嵌入式】移植LCD程序+建立工程+LCD程序分析
  11. 8 下半部和推后执行的工作
  12. 小明上学201812-1
  13. DB2数据库基本操作
  14. java怎么读取数据_java怎么读取数据
  15. 陈情令和明月照我心都有超常镜头,为何前者被原谅,后者被唾弃
  16. kettle 邮件服务器,kettle 实用功能之三 ---- 使用 kettle 群发动态内容的邮件。
  17. 机器视觉工业相机与智能相机的区别
  18. win10没有声音,插入耳机(前置和后置面板)都没反应
  19. 电商必备,如何有效减少客户弃购?
  20. Sybase学习笔记

热门文章

  1. Memcache介绍
  2. CPU使用率不高,内存怎么使用率也不高,但系统假死了
  3. 7年姥爷笔记本升级改造!装上win10再战三年可否?
  4. Android系统手机的ROOT的那些事儿~ 附主流手机的ROOT图文教程和工具下载
  5. 无法定位序数XX于动态链接库XX.dll的解决办法
  6. 什么是微服务网关?SpringCloud Gateway保姆级入门教程
  7. unity 调用高德地图手机读取信息定位和周边(AndroidStudio3.1.2版本打包)。
  8. 11.11计算机网络课堂笔记
  9. 白皮书:产业互联网进入4.0 阶段 区县特色产业数字化迎来爆发
  10. PHP投简历没人回,投简历后没有回复怎么办?