Когда вы загружаете шрифт из скрипта ресурса в память, вы используете код, подобный следующему (вы не добавили языковой тег, поэтому я использую код C / C ++ - дайте мне знать, если это проблема):
HANDLE H_myfont = INVALID_HANDLE_VALUE;
HINSTANCE hResInstance = ::GetModuleHandle(nullptr);
HRSRC ares = FindResource(hResInstance, MAKEINTRESOURCE(IDF_MYID), L"BINARY");
if (ares) {
HGLOBAL amem = LoadResource(hResInstance, ares);
if (amem != nullptr) {
void *adata = LockResource(amem);
DWORD nFonts = 0, len = SizeofResource(hResInstance, ares);
H_myfont = AddFontMemResourceEx(adata, len, nullptr, &nFonts);
}
}
Ключевая строка здесь void *adata = LockResource(amem);
- это преобразует ресурс шрифта, загруженный как HGLOBAL
, в «доступную память» ( документация ). Теперь, предполагая, что ваш байтовый массив имеет правильный формат (см. Ниже), вы, вероятно, могли бы просто передать указатель на него (как void*
) при вызове AddFontMemResourceEx
. (Вы можете использовать свой известный размер массива вместо вызова SizeofResource
.)
Я бы предложил код примерно такой:
void *my_font_data = (void*)(font_byte_array); // Your byte array data
DWORD nFonts = 0, len = sizeof(font_byte_array);
H_myfont = AddFontMemResourceEx(my_font_data, len, nullptr, &nFonts);
, который (надеюсь) даст вам загруженный и Используемый ресурс шрифта.
Когда вы закончите со шрифтом (который после загрузки может использоваться точно так же, как любой системный шрифт), вы можете освободить его с помощью:
RemoveFontMemResourceEx(H_myfont);
Поскольку у меня нет вашего байтового массива, я не могу (очевидно) проверить эту идею. Однако, если вы попробуете это, сообщите нам, если это работает. (Если это не так, могут быть некоторые другие, относительно простые, шаги, которые необходимо добавить.)
ПРИМЕЧАНИЕ: хотя я не могу сказать 100%, что формат точный «ресурс ресурса шрифта» предполагает, что приведенный выше код работает (для меня) с ресурсом, определенным в скрипте .r c как BINARY
с обычным файлом «.ttf», предполагает, что если ваш байтовый массив соответствует формату Windows Font File, он должен работать. Вот как я включил шрифт в качестве встроенного ресурса:
IDF_MYFONT BINARY L"..\\Resource\\MyFont.ttf"