Заполнить символы шрифта белым цветом?

Мой шрифт имеет пустой «внутренний объем». Как показано ниже:

Шрифт с белым фоном:

Белый фон

Шрифт с синим фоном:

Синий фон

Как мы можем сделать «внутреннюю часть» текста всегда белой, не используя фон? Я буду использовать игровой движок Unity.

И, конечно же, я не могу редактировать файл .ttf. Как отметил @itchee: шрифт TTF всегда только одного цвета. Он может указывать только непрозрачные и прозрачные части (технически указываются только непрозрачные части, а все остальное прозрачно). Приложение, отображающее этот шрифт, может выбрать один единственный цвет для непрозрачной части. Но он не может сделать «некоторые части черными, а некоторые — белыми». Мой вопрос заключается в том, как добиться того, чего я хочу, используя игровой движок Unity. Приветствуются любые скрипты C#.

Как сказал @fafase, алгоритм заполнения для каждого персонажа, ищущий окруженную зону и заполняющий их, был бы идеальным.


person Community    schedule 16.01.2016    source источник
comment
Что это за шрифт? Это шрифт, который вы сделали или получили или получили из встроенного в Windows / Mac? Или это просто образ?   -  person ʇolɐǝz ǝɥʇ qoq    schedule 17.01.2016
comment
шрифты могут быть получены разными способами в таком сложном предмете, как игровой движок; вам нужно как минимум включить снимок экрана вашей установки, чтобы дать людям представление о том, что вы делаете.   -  person Fattie    schedule 17.01.2016
comment
@ʇolɐǝzǝɥʇqoq Это шрифт, который я скачал из Интернета.   -  person    schedule 17.01.2016


Ответы (2)


Вы можете использовать растровые шрифты. Unity изначально не поддерживает их, поэтому вы можете использовать ресурс из хранилища ресурсов под названием CJFinc: Инструменты растровых шрифтов. Если вы не готовы платить так много, я нашел хороший учебник здесь.

Но до сих пор моя самая гибкая идея, и, вероятно, то, что я бы сделал, — это создать второй шрифт, который вы можете поместить за своим первым шрифтом. Вы бы сохранили исходный шрифт черного цвета. Второй шрифт будет состоять из простых форм, которые соответствуют форме вашей заливки, и для которых вы устанавливаете любой желаемый цвет. Вот краткий набросок того, что я имею в виду:

объяснить

Вы можете использовать fontforge для создания собственных шрифтов. Это может занять у вас довольно много времени, но тогда оно будет работать стабильно, просто и без особых изменений в ваших сценариях.

person Marc Guiselin    schedule 22.01.2016
comment
К сожалению, этот вариант хитрый. Как сказал @fafase, алгоритм заполнения для каждого персонажа, ищущий окруженную зону и заполняющий их, был бы идеальным. Любые другие надежные способы приветствуются. - person ; 24.01.2016
comment
Алгоритм заполнения также хитрый (лучше использовать слова "хакерский", "обходной" или "полифилл"). Алгоритм заполнения был бы излишне сложным, медленным и сложным в реализации. Не усложняйте это для себя. Если вы это сделаете, вы столкнетесь с проблемами и осложнениями. Как бы вы сделали сложный алгоритм заливки с определением цвета по сравнению с тем, как быстро вы могли бы заполнить фигуры и создать второй шрифт? Выбор мне кажется вполне очевидным. - person Marc Guiselin; 25.01.2016
comment
Я понимаю, но с вашим предложением я должен создать отдельную заливку для каждого символа... - person ; 25.01.2016
comment
Это должно быть намного меньше работы, чем создание так называемого алгоритма заполнения. - person Marc Guiselin; 27.01.2016
comment
В любом случае, вам нужно будет прочитать значения пикселей из шрифта tff (чтобы алгоритм знал, где заполнить ваш цвет), но он не может прочитать эти значения, поскольку файл шрифта ttf на самом деле является svg. Насколько мне известно, я даже не думаю, что такой алгоритм возможен. И не ждите, пока кто-то сделает вам сценарий. Если вы хотите, чтобы кто-то написал вам сценарий, наймите его за деньги. Это сайт для помощи программистам, а не выполнения их работы за них. - person Marc Guiselin; 27.01.2016

Хотя можно редактировать шрифты TTF, вы не можете сделать «фон» белым.

Шрифты TTF могут указывать только непрозрачные и прозрачные части (технически указываются только непрозрачные части, а все остальное прозрачно). Приложение, отображающее этот шрифт, может выбрать один единственный цвет для непрозрачной части. Но он не может сделать «некоторые части черными, а некоторые — белыми».

person itchee    schedule 19.01.2016
comment
Итак, как я могу добиться того, чего хочу, с помощью игрового движка Unity? - person ; 19.01.2016
comment
Единственный способ, который я могу придумать, - это использовать карту спрайтов для каждого символа, который вы хотите использовать, и составить свой текст из спрайтов. - person itchee; 19.01.2016
comment
Спасибо за ответ, но этот вариант не будет эффективным и будет занимать место... - person ; 19.01.2016
comment
Но это ваш ответ, это то, что вам сказали некоторое время назад, когда вы изначально разместили этот вопрос. Вы ожидаете решения, которого, кажется, не существует. Так что либо вы пользуетесь тем, что вам говорят, либо отказываетесь от этого. Если есть желание, можно придумать алгоритм заполнения, для каждой буквы ищет окруженные зоны и заполняет их. Сделайте баунти 500 и, возможно, кто-то потратит на это некоторое время. - person Everts; 22.01.2016
comment
@fafase Я отказываюсь от всех своих баллов за награду, и прошло 5 дней с тех пор, как я задал вопрос ... Мне действительно нужен ответ, потому что крайний срок моего проекта истекает через несколько дней! :( Ваша идея с алгоритмом заполнения звучит интересно, кстати. - person ; 22.01.2016