Как получить ширину и высоту символа в консоли linux с помощью C ++? - PullRequest
1 голос
/ 16 июня 2020

Я написал инструмент C ++ для отображения предварительного просмотра изображения с низким разрешением в консоли, используя символы блока и 4-битную окраску. Для отображения изображения с правильным соотношением сторон мне нужно определить ширину и высоту символа моноширинного шрифта в консоли.

Для Windows я нашел это решение:

CONSOLE_FONT_INFO cfi;
GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), false, &cfi);
int width = (int)(cfi.dwFontSize.X);
int height = (int)(cfi.dwFontSize.Y);

Однако для Linux я нигде не могу найти решение. До сих пор я пробовал

struct winsize w;
ioctl(fileno(stdout), TIOCGWINSZ, &w);
int width = (int)(w.ws_xpixel/w.ws_col);
int height = (int)(w.ws_ypixel/w.ws_row);

, но это возвращает width=0 и height=0, потому что w.ws_xpixel и w.ws_ypixel оба являются 0.

Итак, как получить символ ширина и высота в Linux, желательно без внешних библиотек?

enter image description here

...