首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ImGui中嵌入大于字符大小的字体

在ImGui中嵌入大于字符大小的字体
EN

Stack Overflow用户
提问于 2018-02-23 00:33:10
回答 1查看 1.2K关注 0票数 1

我在使用ImGui作为前端的小脚本上开发翻译。我需要一组扩展的unicode字符可以在字体中使用。因为这个脚本是通过DLL注入的,所以不可能(我认为是这样)。我对c++完全没有经验。)使用:

( io.Fonts->AddFontFromFileTTF("myfontfile.ttf",size_in_pixels);

从ttf文件中添加字体会导致数据== NULL错误;

代码语言:javascript
复制
void* data = ImFileLoadToMemory(filename, "rb", &data_size, 0);
if (!data)
{
    IM_ASSERT(0); // Could not load file.
    return NULL;
}

我还尝试使用io.Fonts->AddFontFromMemoryCompressedBase85TTF并通过包含的binary_to_compressed_c编译字体,但是输出太大了,所以我得到了:

致命错误C1091:编译器限制:字符串长度超过65535字节

但函数不接受除char*以外的任何类型。我将字符连接到字符串中,然后通过str()和c_str()重新组装它,但是app在注入后崩溃了。下面是处理来自base85的ImGui转换的函数:

代码语言:javascript
复制
ImFont* ImFontAtlas::AddFontFromMemoryCompressedBase85TTF(const char* compressed_ttf_data_base85, float size_pixels, const ImFontConfig* font_cfg, const ImWchar* glyph_ranges)
{
    int compressed_ttf_size = (((int)strlen(compressed_ttf_data_base85) + 4) / 5) * 4;
    void* compressed_ttf = ImGui::MemAlloc((size_t)compressed_ttf_size);
    Decode85((const unsigned char*)compressed_ttf_data_base85, (unsigned char*)compressed_ttf);
    ImFont* font = AddFontFromMemoryCompressedTTF(compressed_ttf, compressed_ttf_size, size_pixels, font_cfg, glyph_ranges);
    ImGui::MemFree(compressed_ttf);
    return font;
}

我怎么才能解决这个问题?我什么都试过了,但都没有用。只有将较小的字符传递到编译函数中才能工作(使用捆绑的Cousine_Regular.ttf进行尝试)。

EN

回答 1

Stack Overflow用户

发布于 2018-02-23 15:55:41

我已经找到了解决这个问题的办法。如果您确实需要使用BASE85,仍然没有答案,但是您可以通过转换为int类型(不要将-base85放在binary_to_compressed_c.exe中)来增加您的大小限制,然后将生成的表插入到头文件中,然后使用ImGui提供的指令,如下所示:

头文件:

代码语言:javascript
复制
// File: 'DroidSans.ttf' (190044 bytes)
// Exported using binary_to_compressed_c.cpp
static const unsigned int droid_compressed_size = 134345;
static const unsigned int droid_compressed_data[134348 / 4] =

您的导入/呈现文件:

代码语言:javascript
复制
static const ImWchar ranges[] = { 0x0020, 0x00FF, 0x0100, 0x017F, 0 };
//Because I need extended characters im passing my array to function.

io.Fonts->AddFontFromMemoryCompressedTTF(droid_compressed_data, droid_compressed_size, 16.0f, NULL, ranges);

这就解决了将字符串转换为char和其他与base85导入相关的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48939406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档