Использую pitch от символа, а не его ширину, так как pitch показывает реальные данные в буфере символа. В итоге pitch выдает одну вертикальную линию. Что в таком случае делать? Может масштабировать шрифт, который больше 2x в меньший?
Мне удалось решить проблему так.
uint64_t flags_load = FT_LOAD_NO_BITMAP; flags_load |= FT_LOAD_NO_HINTING | FT_LOAD_NO_AUTOHINT; for (uint32_t i = 0; i < s->cnt_codepoints; i++) { FT_Load_Char ( t->face, s->codepoints[i], flags_load); FT_Render_Glyph ( t->face->glyph, FT_RENDER_MODE_NORMAL);
В таком случае шрифты рисуются, даже с размером 16.
Какое гапи ?
innuendo
Что такое гапи?
xverizex
Gapi
innuendo
по Gapi слишком много совпадений в интернете. Я не пойму что ты имеешь ввиду. Уточни конкретней.
xverizex
Платформа какая ?
innuendo
Linux.
xverizex
А задача какая конкретно ?
innuendo
Не выводился мелкий шрифт < 22. Байт шифтился в бит. Получалось, если шрифт был 8 байт, то стал один байт. У меня же алгоритм настроен, чтобы копировать ровно по pitch. То решение, которое я указал, помогло.
xverizex это местный тролль, не ведись. Почитай его сообщения - там не больше 5 слов в каждом. Он тебе не помогать пришел а тешить своё ЧСВ.
Инуендо умеет хорошо глупые вопросы задавать.
xverizex
для разных размеров конкретный шрифт может хранить глифы в разном виде, для больших в векторном, для мелких может и битовая маска использоваться если у тебя моно шрифт. В идеале ты либо форсишь рендерелку free type'a в нужное тебе представление (как ты сделал, форсить можно и в моно с 1 битом на пиксель), либо забираешь в том в каком есть и уже сам заполняешь растр куда тебе нужно совершая доп. преобразования если надо.
int ft_bits = (glyph_bitmap.pixel_mode == FT_PIXEL_MODE_MONO) ? 1 : 8; int ft_row_sz = glyph_bitmap.pitch; uint8_t alpha = scanline_source[h * ft_row_sz + ( w * ft_bits) / 8]; if( ft_bits == 1) { int bit = ( 7 - ( ( w * ft_bits) % 8)); alpha = ( ( alpha & ( 1 << bit))>>bit) * 255; }
Aroch
Спасибо. Я не буду уже менять свой код. А freetype отдает получается в FT_PIXEL_MODE_MONO шрифты до 22 и больше 22? Просто больше 22 у них обычный не уменьшенный в один бит пиксель.
xverizex
> А freetype отдает получается в FT_PIXEL_MODE_MONO шрифты до 22 и больше 22?
если ты не указываешь то он отдаст глиф в том виде в котором сам шрифт хранит, а в чем он хранит уже авторы шрифта решают а не free type. На конкретный размер даже не пытайся завязываться. Либо тебе придется еще и к конкретным шрифтам привязываться, и тогда уже проще заранее атлас построить.