uint16_t y, char simbol, uint8_t color, matrix_font_t font){
if(simbol == 32) return font.width >> 1; // если пробел
uint32_t charPtr = ((simbol - 32) * font.height * font.width) / 8; // переменная - указатель, двигающийся по массиву шрифта
uint8_t charWidth = 0;
for(uint16_t height = 0; height < font.height; height++){
for(uint16_t width = 0; width < (font.width / 8); width++){
for(uint8_t bit = 0; bit < 8; bit++){
if(font.font[charPtr] & (0b00000001 << bit)){
if(charWidth < width * 8 + bit) charWidth = width * 8 + bit;
draw_pixel(x + width * 8 + bit, y + height, color);
}
}
charPtr++;
}
}
return charWidth;
}
он работает норм и выводит символы корректно, но метод
uint16_t Matrix::draw_text(uint16_t x, uint16_t y, char* text, uint8_t color, matrix_font_t font){
for(uint8_t simbol = 0; simbol < strlen(text); simbol++){
x += 5 + draw_char(x, y, text[simbol], color, font);
}
return x;
}
уже не работает норм, латиница выводится четко, а кириллица нет(все символы заменяются на "п"(209) или "я"(210))
почему так?
а куда ты выводишь?
на матрицу. Это по для мк. У меня растровое изображение всех символов в массиве uint8_t хранится
это что, ты ФОНТ сам пытаешься вывести ?
так какая система, кодировка, и прочее?
а кто тогда пишет "я"(210)) ?
после метода draw_text, метод draw_char перестает писать кириллицу адекватно и заменяет весь текст на буквы п и я (а в скобках я написал их код в аски)
давай ты весь код пришлёшь..
кажется это вопрос к методам draw_text и draw_char
всю либу? там тыщ 10 строк
там ничего вам больше и не надо, кроме этих двух методов
ок, сделай тестовый пример со строкой типа "abcABCабвАБВ" и прогони, но также добавь распечатку посимвольную входных данных, для каждого символа его самого и его кода.
Обсуждают сегодня