E-ink дисплей и киррилица
- Войдите на сайт для отправки комментариев
Вс, 16/09/2018 - 22:36
Есть процедура которая формирует рисование буквы на экране:
/**
* @brief: this draws a charactor on the frame buffer but not refresh
*/
void Paint::DrawCharAt(int x, int y, char ascii_char, sFONT* font, int colored) {
int i, j;
unsigned int char_offset = (ascii_char - ' ') * font->Height * (font->Width / 8 + (font->Width % 8 ? 1 : 0));
const unsigned char* ptr = &font->table[char_offset];
//16 Height, 11 Width
for (j = 0; j < font->Height; j++) {
for (i = 0; i < font->Width; i++) {
if (pgm_read_byte(ptr) & (0x80 >> (i % 8))) {
DrawPixel(x + i, y + j, colored);
}
if (i % 8 == 7) {
ptr++;
}
}
if (font->Width % 8 != 0) {
ptr++;
}
}
}
/**
* @brief: this displays a string on the frame buffer but not refresh
*/
void Paint::DrawStringAt(int x, int y, const char* text, sFONT* font, int colored) {
const char* p_text = text;
unsigned int counter = 0;
int refcolumn = x;
/* Send the string character by character on EPD */
while (*p_text != 0) {
/* Display one character on EPD */
DrawCharAt(refcolumn, y, *p_text, font, colored);
/* Decrement the column position by 16 */
refcolumn += font->Width;
/* Point on the next character */
p_text++;
counter++;
}
}
Данная процедура обращается к таблице массиву шрифта где буква представляет собой цепочку 0x42, 0x00, 0x42, 0x00, и т.д. и т.п.
Если добавить в конец массива цепочки своих букв - при попытке написать русскими буквами на экране увы выводится все что угодно, только не буквы. Помогите добавить русский шрифт. Если не в шрифт с английским языком, пусть хотябы отдельно.
А ежели вместо английских букв свои нарисовать, то все ОК - так? Если не хотите всю библиотеку перепахивать, то создайте свой
sFONT Font8Rus = { Font8Rus_Table, 5, /* Width */ 8, /* Height */ };И передавайте указатель на него в библиотечные функции.
Да это все не проблема, могу переписать или создать свою, речь о том что если передать вместо латиницы строку в которой написать русскими буквами - то не работает. Т.е.:
Не работает, а если писать английскими работает. Просто хочу писать по-русски вместо Ghbdtn (Привет).
...вопрос-то в чем? Не понимаете, почему UTF-8 не хочет впихиваться в char?
...вопрос-то в чем? Не понимаете, почему UTF-8 не хочет впихиваться в char?
Да, как сконвертировать и скормить аналогичный английскому русский шрифт?
Поверьте - проще писать транслитом, чем страдать с преобразованиями кодировок на мелком МК.
Поверьте - проще писать транслитом, чем страдать с преобразованиями кодировок на мелком МК.
Да это все понятно, речь лишь об удобстве.
Ну, если все понятно, то ничем более помочь не могу. Arduino IDE вкрячивает UTF-8 вместо русских букв, если я не ошибаюсь. Сделайте какой-нить функцию-маппер UTF-8 -> Russian Font , в скетче прогоняйте через нее свою строку с приветом и передавайте результат на отрисовку.
Ну, если все понятно, то ничем более помочь не могу. Arduino IDE вкрячивает UTF-8 вместо русских букв, если я не ошибаюсь. Сделайте какой-нить функцию-маппер UTF-8 -> Russian Font , в скетче прогоняйте через нее свою строку с приветом и передавайте результат на отрисовку.
Ну если бы я мог самостоятельно такое написать я бы не стал просить помощи на форуме.
Преобразование UTF-8 в Win-1251 описано здесь:
http://arduino.ru/forum/programmirovanie/rusifikatsiya-biblioteki-adafru...