ПрограммированиеФорумОбщее

В freetype шрифт меньше 2x не отображается.

Страницы: 1 2 Следующая »
#0
10:15, 22 мая 2026

Использую pitch от символа, а не его ширину, так как pitch показывает реальные данные в буфере символа. В итоге pitch выдает одну вертикальную линию. Что в таком случае делать? Может масштабировать шрифт, который больше 2x в меньший?

#1
11:42, 22 мая 2026

Мне удалось решить проблему так.

  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.

#2
10:42, 26 мая 2026

Какое гапи ?

#3
15:15, 26 мая 2026

innuendo
Что такое гапи?

#4
16:12, 26 мая 2026

xverizex
Gapi

#5
17:02, 26 мая 2026

innuendo
по Gapi слишком много совпадений в интернете. Я не пойму что ты имеешь ввиду. Уточни конкретней.

#6
18:04, 26 мая 2026

xverizex
Платформа какая ?

#7
19:32, 26 мая 2026

innuendo
Linux.

#8
9:06, 27 мая 2026

xverizex
А задача какая конкретно ?

#9
10:20, 27 мая 2026

innuendo
Не выводился мелкий шрифт < 22. Байт шифтился в бит. Получалось, если шрифт был 8 байт, то стал один байт. У меня же алгоритм настроен, чтобы копировать ровно по pitch. То решение, которое я указал, помогло.

#10
17:12, 27 мая 2026

xverizex это местный тролль, не ведись. Почитай его сообщения - там не больше 5 слов в каждом. Он тебе не помогать пришел а тешить своё ЧСВ.

#11
12:38, 28 мая 2026

Инуендо умеет хорошо глупые вопросы задавать.

#12
12:45, 28 мая 2026

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;
}
#13
13:07, 28 мая 2026

Aroch
Спасибо. Я не буду уже менять свой код. А freetype отдает получается в FT_PIXEL_MODE_MONO шрифты до 22 и больше 22? Просто больше 22 у них обычный не уменьшенный в один бит пиксель.

#14
13:30, 28 мая 2026

xverizex
> А freetype отдает получается в FT_PIXEL_MODE_MONO шрифты до 22 и больше 22?
если ты не указываешь то он отдаст глиф в том виде в котором сам шрифт хранит, а в чем он хранит уже авторы шрифта решают а не free type. На конкретный размер даже не пытайся завязываться. Либо тебе придется еще и к конкретным шрифтам привязываться, и тогда уже проще заранее атлас построить.

Страницы: 1 2 Следующая »
ПрограммированиеФорумОбщее