恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

全网首发:OSD字幕时,字体数据、间距的正确处理

  • 首页
  • 资讯中心
  • /
  • 全网首发:OSD字幕时,字体数据、间距的正确处理

相关资讯

抖音批量下载工具怎么用:一次配置,跑完整条作者主页 2026/8/15 17:13:02
openpilot 免费驾驶辅助系统:为什么它能改装 300+ 车型,以及如何用 3 步快速上手 2026/8/15 17:08:02
Visual Syslog Server 快速上手指南:如何在 Windows 上搭建免费的日志集中监控平台 2026/8/15 17:08:02

最新资讯

Amazon Kinesis Client源码解析:LeaseCoordinator如何实现分布式协调
Modal组件交互测试:react-native-testing弹出层验证完整指南
Beanstalk-Deploy入门教程:3分钟快速实现GitHub Actions自动部署
trouter性能揭秘:为什么它是Node.js中最快的路由库之一
GP2040-CE固件从零上手:30分钟用Raspberry Pi Pico打造多平台游戏手柄
虚拟细胞:结构-动力学解耦范式

今日推荐

内景 空间站内部 中国空间站 太空 内仓
重新定义数据接口:3个突破性场景让通达信数据读取更智能
5大网络安全实操平台,免费练手入门,轻松掌握攻防技能

本周热门

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁
如何快速生成中国车牌图片:Python开源工具完整指南
当 LLM 遇见大文档:主流开源项目如何处理上下文超限

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

全网首发:OSD字幕时,字体数据、间距的正确处理

发布时间:2026/8/15 17:13:02
全网首发:OSD字幕时,字体数据、间距的正确处理 比如说如果是巍宇这字好处理如果是一丨字体数据只有一行数据如何刷新处理间距又如何处理别担心。我这里有现成的代码。先看处理结果https://blog.csdn.net/quantum7/article/details/153679213FreeType字体加载这个各位想必很熟悉了。FT_Library m_pFTLib NULL; FT_Face m_pFTFace NULL; int m_iFontSize 16; FT_Init_FreeType(m_pFTLib); if (FT_New_Face(m_pFTLib, mFontFile, 0, m_pFTFace)) { WY_LOG_TEXT(FT_New_Face error!); return; } //FT_ENCODING_GB2312, FT_ENCODING_UNICODE FT_Select_Charmap(m_pFTFace, FT_ENCODING_UNICODE); FT_Set_Char_Size (m_pFTFace, 0, m_iFontSize6, 200, 200);加载字符插槽使用的是Slot而不是Glyph。因为代码是用于字幕字幕字符是固定的所以使用了一个std::map保存起来。static FT_GlyphSlot osd_load_char_glyph(const wchar_t wch, const FT_Face pFTFace) { FT_GlyphSlot wslot new FT_GlyphSlotRec(); int result FT_Load_Char( pFTFace, wch, FT_LOAD_RENDER ); FT_GlyphSlot slot pFTFace-glyph; memcpy(wslot, slot, sizeof(FT_GlyphSlotRec)); FT_Bitmap* bmp (slot-bitmap); int size bmp-rows*bmp-width; wslot-bitmap.buffer (unsigned char*)malloc(size); memcpy(wslot-bitmap.buffer, bmp-buffer, size); return wglyph; }正确处理数据及间距#define COLOR_TO_PIXEL(pixel, color, v, index) {int temp color.val[index]*v/0xFF; \ if (temp 0 color.val[index] ! 0) temp 1; \ pixel[index] temp; } #define COLOR_R_INDEX 2 #define COLOR_G_INDEX 1 #define COLOR_B_INDEX 0 void refresh(cv::Mat rgb, cv::Scalar color, int startX, int startY) { bool isBlack (color.val[0] 0 color.val[1] 0 color.val[2] 0); for (int i0; ithis-mTextCount; i) { wchar_t wch this-mText[i]; std::mapwchar_t, FT_GlyphSlot::iterator it mTextGlyphMap.find(wch); FT_GlyphSlot pSlot it-second; FT_Bitmap* pBmp (pSlot-bitmap); int osdWpBmp-width; int osdHpBmp-rows; int osdX startXpSlot-bitmap_left; //高度是pSlot-metrics.vertAdvance/64因为要绘制所以要减去 int osdY startY(pSlot-metrics.vertAdvance/64-pSlot-bitmap_top); for (int j0; josdH; j){ for (int i0; iosdW; i){ unsigned char v pBmp-buffer[osdW*ji]; if (v MIN_FONT_VALUE) { continue; } cv::Vec3b pixel rgb.atcv::Vec3b(osdYj, osdXi); if (isBlack) { v 0xFF-v; pixel[COLOR_B_INDEX] v; pixel[COLOR_G_INDEX] v; pixel[COLOR_R_INDEX] v; } else { COLOR_TO_PIXEL(pixel, color, v, COLOR_B_INDEX); COLOR_TO_PIXEL(pixel, color, v, COLOR_G_INDEX); COLOR_TO_PIXEL(pixel, color, v, COLOR_R_INDEX); } } } // 这个是正确宽度 startX pSlot-metrics.horiAdvance/64; } }

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号