2013-07-01 2 views
0

Я в настоящее время жестко прописывать мои изображения в моем C++ программы в качестве структуры (исходного кода с данными пикселей может быть создан с GIMP), например так:Как интегрировать (hardcode) файл шрифта в мою программу?

static const struct { 
    unsigned int width; 
    unsigned int height; 
    unsigned int bytes_per_pixel; 
    unsigned char pixel_data[16 * 16 * 4 + 1]; 
} my_icon = { 
    16, 16, 4, 
    "...", pixel data here 
}; 

Это работает отлично, и я очень счастливый! Но теперь я хочу сделать то же самое для файла шрифта, который я использую.

Поскольку GIMP сделал преобразование для меня, но, очевидно, не может преобразовать шрифт для меня, я застрял сейчас и не знаю, как бы я пошел по hardcoding font.ttf, как и с изображениями.

Если это имеет какое-то отношение, это то, как я в настоящее время загрузки файла шрифта:

sf::Font font; 
if (!font.loadFromFile("font.ttf")) { 
    std::cout << "Could not load font" << std::endl; 
    return -1; 
} 

Может кто-то пожалуйста, помогите мне? (Размер шрифта меньше 25 КБ, поэтому проблем нет)

Спасибо!

ответ

1

It seem Шрифт имеет штраф loadFromMemory метод. Таким образом, вы можете использовать его в точности как ваш предыдущий пример, представляя данные в строковом литерале и передавая его.

Нетрудно написать программу, которая преобразует двоичный файл в формате \ xHH hexdump, подходящем для включения.

+0

Не могли бы вы рассказать мне, какой формат это: «\ 307R \ 377 \ 357 \ 305W \ 377 \ 3 ...» Я попробовал двоичный конвертер Hex и инструмент hexdump, подобный этому: http: // www .fileformat.info/tool/hexdump.htm, но это не в указанном выше формате. Я не знаю, как это называется. У меня Googled как сумасшедший, чтобы преобразовать шрифт в этот формат, но я ничего не могу найти :( –

+0

Похоже, что это постоянный указатель на последовательность байтов {0xC7,0x52,0xFF, 0xEF, 0xC5,0x57,0xFF, ...}. Обратная косая черта, сопровождаемая тремя цифрами, представляет это байтовое значение в * восьмеричном *, печатный символ, который не является обратной машиной, завершающей цитатой или вопросительным знаком, представляет собой его код символа в целевом наборе символов (обычно ASCII). – supercat

+0

Инструмент командной строки xxd преобразует двоичные файлы в шестнадцатеричные массивы в формате C с помощью 'xxd -i '. – Vortico

0

Все правильно, это мое решение:

Я использовал инструмент Bin2h (http://www.deadnode.org/sw/bin2h/), чтобы создать следующий код:

unsigned int fontSize = 22256; 
unsigned char fontChar[] = { 
0x00,0x01,0x00,... 
}; 

Затем я использую

font.loadFromMemory(fontChar, fontSize) 

для загрузки шрифт.

Смежные вопросы