Я написал инструмент 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, желательно без внешних библиотек?