首页
学习
活动
专区
圈层
工具
发布

OpenGL ES 文字渲染

FreeType 官网地址: https://www.freetype.org/ FreeType 编译 本小节主要介绍使用 NDK 编译 Android 平台使用的 FreeType 库。...一个字体面中 Face 包含了所有字形的集合,我们可以通过调用 FT_Load_Char 函数来激活当前要表示的字形。...使用 FreeType 加载的字形位图并不像我们使用位图字体那样持有相同的尺寸大小。使用FreeType生产的字形位图的大小是恰好能包含这个字形的尺寸。例如生产用于表示 '.'...的位图的尺寸要比表示 'A' 的小得多。 因此,FreeType在加载字形的时候还生产了几个度量值来描述生成的字形位图的大小和位置。下图展示了 FreeType 的所有度量值的涵义。...最后,使用完 FreeType 记得释放相关资源: FT_Done_Face(face); FT_Done_FreeType(ft); OpenGL 文字渲染 按照前面的思路,使用 FreeType 加载字形的位图然后生成纹理

2K70

OpenGL ES 文字渲染方式有几种?

使用 FreeType 渲染文字 FreeType 的使用 引入头文件: #include "ft2build.h" #include freetype/ftglyph.h> 然后要加载一个字体,...一个字体面中 Face 包含了所有字形的集合,我们可以通过调用 FT_Load_Char 函数来激活当前要表示的字形。...使用 FreeType 加载的字形位图并不像我们使用位图字体那样持有相同的尺寸大小。使用FreeType生产的字形位图的大小是恰好能包含这个字形的尺寸。例如生产用于表示 '.'...的位图的尺寸要比表示 'A' 的小得多。 因此,FreeType在加载字形的时候还生产了几个度量值来描述生成的字形位图的大小和位置。下图展示了 FreeType 的所有度量值的涵义。 ?...加载字形的位图然后生成纹理,然后进行纹理贴图。

2.6K31
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++智能指针的正确使用方式

    所有权在rust语言中非常严格,写rust的时候必须要清楚自己创建的每个对象的所有权。 但是C++比较自由,似乎我们不需要明白对象的所有权,写的代码也能正常运行。...但是明白了对象所有权,我们才可以正确管理好对象生命周期和内存问题。 C++引入了智能指针,也是为了更好的描述对象所有权,简化内存管理,从而大大减少我们C++内存管理方面的犯错机会。...只能使用std::move转移当前对象的所有权。转移之后,当前对象不再持有此内存,新的对象将获得专属所有权。...,pa和pb都无法被正常的释放。...总结 对于智能指针的使用,实际上是对所有权和生命周期的思考,一旦想明白了这两点,那对智能指针的使用也就得心应手了。

    10.3K42

    使用 golang 在图片上绘制文字

    它并不负责排版,而是专注于字体加载和字形渲染,广泛应用于浏览器、游戏引擎、嵌入式设备、图形界面系统等。...("Hello, 世界", pt)中文支持依赖字体文件本身,必须使用包含中文字形的字体。...= nil {log.Fatalf("保存图像失败: %v", err)}fmt.Println("图像已保存为 output.png")}六、避坑指南中文无法显示确保字体文件包含中文(如思源黑体)使用....ttf 而非 .ttc 以提升兼容性文字位置不准确yBase := y + int(c.PointToFixed(size)>>6)pt := freetype.Pt(x, yBase)性能问题避免重复加载字体可使用...go:embed 将字体文件嵌入二进制,提高部署便利性尽量提前加载字体并缓存设置合适 DPI 与 Hinting 提高小字号可读性使用高质量 JPEG/PNG 输出格式优化图片质量借助 freetype

    29810

    OpenGL ES 文字渲染进阶--渲染中文字体

    [渲染中文字体] 利用 Canvas 绘制中文字体和绘制其他字体在操作方式上没有区别,但是使用 FreeType 绘制中文字体,在编码方式、加载方式以及字体属性上面会有一些坑要踩,这里本人已经踩过,将在本文中分享给各位读者大人...关于 FreeType 前文已经进行了详细的介绍,它是一个基于 C 语言实现的用于文字渲染的跨平台开源库,它小巧、高效、高度可定制,主要用于加载字体并将其渲染到位图,支持多种字体的相关操作。...TrueType 字体不采用像素或其他不可缩放的方式来定义,而是一些通过数学公式(曲线的组合)。这些字形,类似于矢量图像,可以根据你需要的字体大小来生成像素图像。...使用 FreeType 渲染中文和英文字符在流程上基本一致,都是根据字符的编码值来加载位图,然后上传纹理。...FreeType 加载中文字符位图需要,先根据 Unicode 编码值查询位图的索引,然后根据索引获取到 FreeType 的 Glyph 对象,最后再将 FT_Glyph 转换为 FT_BitmapGlyph

    1.6K20

    OpenGL ES 文字渲染进阶--渲染中文字体

    渲染中文字体 利用 Canvas 绘制中文字体和绘制其他字体在操作方式上没有区别,但是使用 FreeType 绘制中文字体,在编码方式、加载方式以及字体属性上面会有一些坑要踩,这里本人已经踩过,将在本文中分享给各位读者大人...关于 FreeType 前文已经进行了详细的介绍,它是一个基于 C 语言实现的用于文字渲染的跨平台开源库,它小巧、高效、高度可定制,主要用于加载字体并将其渲染到位图,支持多种字体的相关操作。...TrueType 字体不采用像素或其他不可缩放的方式来定义,而是一些通过数学公式(曲线的组合)。这些字形,类似于矢量图像,可以根据你需要的字体大小来生成像素图像。...使用 FreeType 渲染中文和英文字符在流程上基本一致,都是根据字符的编码值来加载位图,然后上传纹理。...FreeType 加载中文字符位图需要,先根据 Unicode 编码值查询位图的索引,然后根据索引获取到 FreeType 的 Glyph 对象,最后再将 FT_Glyph 转换为 FT_BitmapGlyph

    2.1K20

    FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass

    注意:下列的所有命令均需在MSYS窗口中执行。1、安装freetypefontconfig、fribidi、harfbuzz、libass都依赖于freetype库,所以要先安装该库。...=/usr/local/freetype/lib/pkgconfig:$PKG_CONFIG_PATH然后执行下面命令重新加载环境变量:source /etc/profile执行下面命令查看当前的环境变量...env | grep PKG_CONFIG_PATH6、安装harfbuzzharfbuzz是一个文本塑形引擎,它能够将Unicode字符转换为格式正确的字形输出,可用于调试和预览字体效果。...env | grep PKG_CONFIG_PATH7、安装libass确认以上的freetype、libxml2、gperf、fontconfig、fribidi、harfbuzz等库全都正确安装之后...ffmpeg -version查看控制台回显的FFmpeg版本信息,找到“--enable-libass”,说明FFmpeg正确启用了字幕渲染器libass。

    72910

    c++ strstr函数_简述酒精灯的正确使用方法

    strstr方法是比较常用的,我在使用的过程中经常会忘掉入参中的两个字符串到底谁是谁的子串,今天记录一下,加深一下印象。...注意:strstr(str1,str2) 此时千万要记住,这是在判断str2是否是str1的子串!! 重要的事情: 这是在判断str2是否是str1的子串!!...这是在判断str2是否是str1的子串!! 这是在判断str2是否是str1的子串!! 好了,也就是在判断后面的是不是前面的子串。...如果不是,则返回null; 大家在用的时候一定要注意,返回的是首次出现的地址。...3.使用库函数一定要看他的实现,不要企图通过实验现象来推断意图。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

    77520

    【Python从入门到精通】(二十六)用Python的PIL库(Pillow)处理图像真的得心应手

    该函数从给定的文件或类文件对象加载一个字体对象,并为给定大小的字体创建一个字体对象。Pillow 使用 FreeType 打开字体文件。...如果接近该限制,OSError可能会抛出an ,报告 FreeType“无法打开资源”。此功能需要 _imagingft 服务。...可能的编码包括(有关更多信息,请参阅 FreeType 文档):这指定要使用的字符集。它不会改变后续操作中提供的任何文本的编码。...要获取所有支持的功能,请参阅OpenType 文档。需要 libraqm。 language—— 文本的语言。不同的语言可能使用不同的字形形状或连字。...此参数告诉字体文本使用的语言,并根据需要应用正确的替换(如果可用)。它应该是BCP 47 语言代码。需要 libraqm。 stroke_width–文本笔划的宽度。

    3.9K20

    EasyGBS使用https播放视频流出现无法加载播放的情况排查及处理

    由于EasyGBS在不断进行改进,得到了很多用户的好评和客户的信任,我们在一年前就已经支持了https的配置。...HTTPS为非对称加密,即加密和解密都通过不同的钥匙来进行,给传输数据增加了更加严密的保护。 有EasyGBS用户使用https播放视频流时发现无法加载和播放,界面一直显示缓冲状态。...登陆EasyGBS的web页面也会出现证书的风险提示: 通过这个提示我们可以判断该证书并不正规,所以我们需要选择高级,点击里面的接受风险。...此时虽然EasyGBS的web页面是正常了,但是播放的视频流还是不行,这个问题是因为EasyGBS配置文件里面是有两个配置https的路径,一个是2443的EasyGBS的https端口,一个是1443...的EasyGBS的流使用的端口,因为1443没有接受风险,所以导致流不能正常的播放,所以我们需要登录1443端口进行接受风险。

    1.3K20

    38.opengl-字体渲染

    关于字符更详细的定义,参考:https://www.supremo.co.uk/typeterms/ 基于经典文本渲染的瓶颈,现在有更好的文本渲染方式,基于FreeType处理。...FreeType有以下优点: 1)跨平台 2)能加载TrueType字体,TrueType不是基于像素定义的,而是通过数学公式(曲线)来定义,类似矢量图像,所以方便渲染不同大小的字形,有更好的适配能力...128个常用字符(降低使用难度),存放到map中,使用完记得释放freetype for (GLubyte c = 0; c c++) { // Load character...,没有像之前使用投影矩阵,并且投影矩阵的左下角是(0, 0)坐标 glm::mat4 projection = glm::ortho(0.0f, static_cast(SCR_WIDTH...local/include/freetype2/下生成头文件 因为freetype的代码依赖结构,需要修改header文件,讲freetype2目录下的头文件copy到include下,否则会编译报错

    1.9K30

    【第3版emWin教程】第32章 emWin6.x的矢量字体(支持汉字全字库,Unicode编码,QSPI Flash方案)

    2、 实验中发现了以下三个问题,给大家分享下: 不是所有电脑端的矢量字体都可以显示,测试发现有些无法正常显示,估计是emWin库不支持。 不能显示太大的字体,测试发现130点阵之后就无法显示了。...Type1使用三次贝塞尔曲线来描述字形,TrueType则使用二次贝塞尔曲线来描述字形。所以Type1的字体比TrueType字体更加精确美观。...这是因为对于稍微复杂的字形,为了保持平滑,TrueType必须使用更多的关键点。...emWin对该库的使用符GUI\TrueType\FTL. txt下的FreeType授权许可。emWin对该库进行了少许改编,添加了带有GUI函数的应用层。...32.7.3 下载配置 注意这里一定要够大,否则会提示算法文件无法加载: 我们这里是将其加到DTCM中,即首地址为0x20000000,大家也可以存储到任意其它RAM地址,只要空间还够加载算法文件即可。

    77831

    编译windows版的openJDK攻略

    另外编译涉及的所有文件都必须存放在NTFS格式的文件系统中,因为FAT32格式无法支持大小写敏感的文件名。在官方文档上写到:编译至少需要512MB的内存和600MB的磁盘空间。...需要CYGWIN的原因是在编译中要使用GNU Make来执行Makefile文件(C/C++程序员肯定很熟悉,如果只使用Java,那把这个东西当做C++版本的ANT看待就可以了)。...JDK中最核心的代码(Java虚拟机及JDK中Native方法的实现等)是使用C++语言及少量的C语言编写的,官方文档中说他们的内部开发环境是在Microsoft Visual Studio C++ 2003...建议读者选择使用整套Visual Studio C++ 2010或Visual Studio C++ 2010 Express版进行编译。    ...但仔细想想其实这个步骤很合理:因为JDK包含的各个部分(Hotspot、JDK API、JAXWS、JAXP……)有的是使用C++编写的,而更多的代码则是使用Java自身实现的,因此编译这些Java代码需要用到一个可用的

    6.2K30

    Windows下C++使用thread时无法识别thread和mutex相关库的解决

    问题描述 今天我在Windows下打算尝试C++多线程编程,在CLion上进行编码。...CLion的C++编译器是正常的,以前也跑过好几个项目,使用其他STL库函数也正常,唯独使用thread时报无法识别的错,所有thread都划上了红线。如下图所示: ?...(fix available) 问题解决过程 因为thread和mutex是C++11才引入的,所以一开始考虑的是不是CMakeList上没有加编译选项,于是加上 set(CMAKE_CXX_FLAGS...后来受到博客CLion安装mingw并配置以支持c++11多线程编程的启发,重新安装mingw编译器,但是不成功。...总结 不能使用thread是因为mingw的编译器不支持thread,需要重新安装mingw,安装方法在引用的两篇博客里都有。同时需要确保建立工程时使用的是C++11及以上标准。

    3.9K20

    使用java命令运行class文件提示“错误:找不到或无法加载主类“的问题分析

    1.java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定的目录中寻找的。 2.我们忽略了package的影响。...依然有问题,为什么,其实大家再回去看看java的书籍就会发现,一个类的全名应该是包名+类名。类A的全名:org.will.app.main.NewsManager 好的,再试试: ? 还是不对。...二、java执行class文件对package的路径是强依赖的。它在执行的时候会严格以当前用户路径为基础,按照package指定的包路径转化为文件路径去搜索class文件。各位同学以后注意就OK啦。...至于网上说的要在CLASSPATH要加各种包等等都是泛泛而谈,真正静下心分析这个问题的资料不多。很多都没有说到点子上,会误导人的。...除特别注明外,本站所有文章均为慕白博客原创,转载请注明出处来自https://geekmubai.com/programming/292.html

    7.3K30
    领券