- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将freetype位图缓冲区转换为cv::Mat
。到目前为止,这就是我所得到的(我仅将代码的相关部分放到了一起)
struct glyph_t
{
uchar character;
cv::Mat mat;
b2PolygonShape shape;
unsigned char* bitmap_buffer;
};
// ...
// Initialize freetype library
if (FT_Init_FreeType(&m_library))
// ... error handling here
if (FT_New_Face(m_library, R"(C:\Windows\Fonts\Arial.ttf)", 0, &m_face))
// ... error handling here
FT_Set_Pixel_Sizes(m_face, 0, 48);
// ...
// only capital letters
for (auto c = 65; c <= 90; c++)
{
if (FT_Load_Char(m_face, c, FT_LOAD_RENDER))
// ... error handling here
glyph_t g;
g.bitmap_buffer = m_face->glyph->bitmap.buffer;
g.character = c;
g.mat = cv::Mat(
m_face->glyph->bitmap.rows,
m_face->glyph->bitmap.width,
CV_8UC1,
m_face->glyph->bitmap.buffer);
m_glyphs.push_back(g); // std::vector<glyph_t>
}
<<
重载的Mat,如下所示:
for (auto m_glyph : m_glyphs)
{
std::cout << m_glyph.mat << std::endl;
std::cout << static_cast<uint>(m_glyph.bitmap_buffer[0]) << std::endl;
}
L
的输出如下所示。对于字母
A
,Mat仅包含221 ...的值,因此我将位图缓冲区转换为
cv::Mat
的方式一定存在问题。我在这里做错了什么?
[ 0, 0, 12, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 144, 0;
0, 0, 12, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 144, 0;
0, 0, 12, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 144, 0;
0, 0, 12, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 144, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 253, 255, 255, 255, 247, 51, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 248, 255, 255, 255, 255, 97, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 237, 255, 255, 255, 255, 152, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 210, 255, 255, 255, 255, 200, 6, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 255, 255, 255, 255, 233, 28, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 255, 255, 255, 255, 251, 64, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 251, 255, 255, 255, 255, 114, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 231, 255, 255, 255, 255, 169, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 194, 255, 255, 255, 255, 212, 11, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 255, 255, 255, 255, 241, 37, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, 255, 255, 255, 255, 254, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 243, 255, 255, 255, 255, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 214, 255, 255, 255, 255, 184, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 255, 255, 255, 255, 223, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, 255, 255, 255, 255, 246, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 251, 255, 255, 255, 255, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 23, 230, 255, 255, 255, 255, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 4, 193, 255, 255, 255, 255, 198, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 140, 255, 255, 255, 255, 232, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 83, 255, 255, 255, 255, 251, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 39, 242, 255, 255, 255, 255, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 11, 213, 255, 255, 255, 255, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 167, 255, 255, 255, 255, 210, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 111, 255, 255, 255, 255, 240, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 59, 250, 255, 255, 255, 253, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 23, 229, 255, 255, 255, 255, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
1, 192, 255, 255, 255, 255, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
8, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 32;
8, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 32;
8, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 32;
8, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 32]
0
cv::Mat m = cv::Mat(m_face->glyph->bitmap.rows, m_face->glyph->bitmap.width, CV_8UC1);
for (uint row = 0; row < m_face->glyph->bitmap.rows; row++)
{
for (uint i = 0; i < m_face->glyph->bitmap.width; i++)
{
auto value = m_face->glyph->bitmap.buffer[row*m_face->glyph->bitmap.width+i];
m.at<uchar>(row, i) = value;
}
}
最佳答案
我想到了。 OpenCV拥有自己的内存管理和引用计数机制。这意味着只要cv::Mat对象超出范围,它的内存就会被释放。
因此,我构造对象的方式没有任何问题。但是我在分配之前忘记了克隆。
glyph_t g;
g.bitmap_buffer = m_face->glyph->bitmap.buffer;
g.character = c;
cv::Mat m(
m_face->glyph->bitmap.rows,
m_face->glyph->bitmap.width,
CV_8UC1,
m_face->glyph->bitmap.buffer);
g.mat = m.clone(); // This made the trick...
m_glyphs.push_back(g);
关于c++ - 如何正确地将freetype位图缓冲区转换为opencv Mat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59887237/
我有点困惑设置字符大小对象的字符宽度和高度字段(示例来自 FreeType tutorial 中所述) error = FT_Set_Char_Size( face, /*
我正在尝试使用 freetype 枚举字体文件中的字形(名称和 unicode)。 为了获取名称,我使用了 FT_Get_Glyph_Name。但是我怎样才能得到字形 unicode 值呢? 我是字形
它运行在 OS X 10.9 上。我使用 brew 和 FreeType v2.5.2 安装了 GraphicsMagick。但是当我在程序中使用 gm Convert 时,出现此错误: { [Err
项目设置: GameProject [此项目包含游戏代码] GameProject-Android GameProject-桌面 GameProject-robovm [这是一个无需使用任何自由字体即
尝试在 Ubuntu Linux 86-64 上编译 freetype 2.6.1 时,我在配置步骤收到以下消息: /usr/local/include/harfbuzz/hb-common.h:31
当字符串确实包含我使用的默认字体中不存在的字符时,如何告诉 freetype 使用后备字体? 我需要在我的应用程序中正确呈现非拉丁字形。 我必须自己管理回退吗? 如果是这样:如何检测给定字符串中是否缺
我已将“arial.ttf”文件(从我的/Windows/Fonts 文件夹中获取)加载到内存中,但是将其传递到 FT_New_Memory_Face 时会崩溃(在 FT_Open_Face 中的某处
我正在尝试使用 FreeType 为微 Controller 创建位图字体,但我对坐标表达方式的根本差异感到困惑。我的微 Controller 期望字形位图相对于左上角的原点有 X 和 Y 偏移,而
我正在编写一个 DirectX WindowsPhone 应用程序,我需要使用 FreeType。好吧,我已经下载了 FreeType 源代码并使用 CMake 为 WP ARM 生成 Visual
所以我尝试在我的图形引擎中使用带符号的距离字段实现字体渲染。 为此,我使用 FreeType 库生成所有字母的字形。具体来说,我正在尝试像这样加载单色位图: FT_Load_Char(face, c,
我目前正在尝试创建仅包含字形外部边界、内部没有任何填充的字形位图。为此使用 FreeType 库。这是我的代码,类似于 FreeType 引用中的示例 2 代码: Spans outlineSpans
我正在渲染文本,我需要字体的大写高度达到一定的像素数。例如,在下面的标志中,我需要让 SPEED 和 LIMIT 的高度相同,在本例中为 45 px,因此我将字体大小设置为45(我现在明白这不是一个好
我正在尝试使用 FreeType 2.4.11在我使用 openGL 渲染文本的项目中。 虽然我初始化了库,但只将 charmap 设置为 unicode 一次。在每次绘制的字符循环中使用 FT_Lo
我正在尝试创建单色字形图集,但遇到了问题。 Freetype 在字形的位图中呈现“废话”。我责怪 freetype,因为一些字形仍然正确呈现。 生成的纹理图集: 为什么会这样,我该如何解决? 但是我仍
我尝试在 OpenGL 和 FreeType2 中渲染文本,但我不知道如何在渲染字体时获取每行之间的空间(以像素为单位)。当我解析文本时,我希望能够做类似的事情 const char *text =
我正在尝试使用 AIDE 应用程序直接从我的手机使用 freetypefontgenerator。我已完成本文中显示的所有步骤:https://github.com/libgdx/libgdx/wik
这个问题与以下内容密切相关 Is there a way to programmatically determine if a font file has a specific Unicode Gly
我对 Mac OS X 环境比较陌生。 我试图安装 freetype 库以在 OpenGL 中显示文本,但我失败了。 我在一些论坛上读到 freetype 预装了 Mac OS X 山狮。 我只是想确
以前版本的 FreeType 有一个方法 setScale() 现在我可以使用以下方法更改比例: bitmapFont.getData().SetScale(); 但是我遇到了字母间距问题: /ima
使用 FreeType (2.10.1) 在我的游戏引擎中实现文本渲染,我遇到了奇怪的字形,包含重复四次的字母,在 x 轴上镜像并颠倒。 在所需的字母上方似乎有被解释为字形的相邻内存,它在每次运行时都
我是一名优秀的程序员,十分优秀!