jcxz 184 29 мая, 2020 Опубликовано 29 мая, 2020 · Жалоба 11 минут назад, ViKo сказал: 1. У меня сейчас каждый символ представлен отдельным массивом (индексов строк). Собрать все символы в один массив? да. Цитата 2. Смещения, допустим, определим. Но длину тоже нужно вычислить. Как разницу между смещениями соседей? Пожалуй. да. Потому я и написал про 32+1. Цитата 3. Поправки смещений - это, типа, к некоему усреднённому (или минимальному?) размеру задавать ± (+) смещение? К минимальному (Rmin). Я же приводил формулу выше. Rmin - минимальный размер описания символа. Смещение = код_символа * Rmin + поправка_из_таблицы (в каждом элементе которой хранится сумма всех R-Rmin для символов до текущего). Цитата Муторно выглядит. Зато - верх экономии! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 29 мая, 2020 Опубликовано 29 мая, 2020 · Жалоба К минимальному, к максимальному, к среднему - одинаково. Смещение байтом ограничено. Мысль понял, спасибо! А, нет, не одинаково! При среднем размере не будет набегать ошибка смещения к концу массива. Так что, нет - только вино среднее! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 29 мая, 2020 Опубликовано 29 мая, 2020 · Жалоба Если уж совсем крохоборствовать, то можно просто слить все символы в один массив, и каждый раз сканировать начало нужного символа, пропуская предыдущие (по завершающему нулю). Или заменить ноль в конце на байт длины в начале - так будет чуть быстрее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 29 мая, 2020 Опубликовано 29 мая, 2020 · Жалоба 5 минут назад, AHTOXA сказал: Если уж совсем крохоборствовать, то можно просто слить все символы в один массив, и каждый раз сканировать начало нужного символа, пропуская предыдущие (по завершающему нулю). Или заменить ноль в конце на байт длины в начале - так будет чуть быстрее. Сканировать - долго. Отдельная таблица 16-битовых смещений выглядит неплохим решением. 64 байта. А как эти смещения вычислять, если массив непрерывный? Метки задавать, что ли? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 29 мая, 2020 Опубликовано 29 мая, 2020 · Жалоба 3 минуты назад, ViKo сказал: Отдельная таблица 16-битовых смещений выглядит неплохим решением. 64 байта. Лично на мой вкус, геморрой со "склеиванием" символов в один массив не стоит потери 64 байтов. Так что лично я бы сделал раздельные массивы для каждого символа и массив указателей. Так нагляднее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 29 мая, 2020 Опубликовано 29 мая, 2020 · Жалоба А что там насчет массивов переменной длины? Двумерный сделать? Нет, не годится. Это только для локальных массивов, во время работы можно использовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 29 мая, 2020 Опубликовано 29 мая, 2020 · Жалоба Ого, сообщение пропало. Как? Задавал вопрос, как определить смещение в массиве. Не придумал. Зато придумал - структура из массивов! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 29 мая, 2020 Опубликовано 29 мая, 2020 · Жалоба Я вот такую заготовочку применял font.h Roboto43.c Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 29 мая, 2020 Опубликовано 29 мая, 2020 · Жалоба 12 минут назад, dimka76 сказал: Я вот такую заготовочку применял font.h Roboto43.c Спасибо, посмотрел. Вы символы не сжимаете. А для рисования я использовал программу, что Антон дал. По ней сейчас и набираю строки пикселей. Вот пара символов (_off_on_off_ ets., extra_number, ... eoc ): uint8_t BigCharSpace[] = { // 'space' (default, dummy) bcrx_32, 0 } uint8_t BigChar0[] = { // '0' bcrx_11_10_11, bcrx_9_14_9, bcrx_7_18_7, bcrx_6_20_6, bcrx_5_22_5, bcrx_4_8_8_8_4, bcrx_3_7_12_7_3, bcrx_3_6_14_6_4, bcrx_2_6_16_6_2, bcrx_2_5_18_5_2, bcrx_1_6_18_6_1, bcrx_1_5_20_5_1, 25, bcrx_1_6_18_6_1, bcrx_2_5_18_5_2, bcrx_2_6_16_6_2, bcrx_3_6_14_6_4, bcrx_3_7_12_7_3, bcrx_4_8_8_8_4, bcrx_5_22_5, bcrx_6_20_6, bcrx_7_18_7, bcrx_9_14_9, bcrx_11_10_11, 0 }; uint8_t BigChar1[] = { // '1' bcrx_14_5_13, bcrx_13_6_13, bcrx_12_7_13, bcrx_11_8_13, bcrx_10_9_13, bcrx_9_10_13, bcrx_8_11_13, bcrx_7_12_13, bcrx_6_7_1_5_13, bcrx_6_6_2_5_13, bcrx_6_5_3_5_13, bcrx_6_4_4_5_13, bcrx_14_5_13, 30, bcrx_9_15_8, 4, 0 }; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 29 мая, 2020 Опубликовано 29 мая, 2020 · Жалоба 2 hours ago, ViKo said: Спасибо, посмотрел. Вы символы не сжимаете. Я просто хотел обратить внимание как шрифт и символы описываются. const FONT_CHAR_INFO Roboto_43ptDescriptors[] = { {5, 73, 0}, /* 0 */ {5, 73, 365}, /* 1 */ {5, 73, 730}, /* 2 */ {5, 73, 1095}, /* 3 */ {5, 73, 1460}, /* 4 */ {5, 73, 1825}, /* 5 */ {5, 73, 2190}, /* 6 */ {5, 73, 2555}, /* 7 */ {5, 73, 2920}, /* 8 */ {5, 73, 3285}, /* 9 */ }; /* Font information for MyFont 70pt */ const FONT_INFO Roboto_43ptFontInfo = { 73, /* Character height */ '0', /* Start character */ '9', /* End character */ //48, /* Width, in pixels, of space character */ Roboto_43ptDescriptors, /* Character descriptor array */ Roboto_43ptBitmaps, /* Character bitmap array */ }; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 1 июня, 2020 Опубликовано 1 июня, 2020 · Жалоба Я вот как хочу сделать. Структура, в ней массив смещений на массивы индексов строк для каждого символа, и дальше сами массивы. То есть: static const struct { uint16_t bc_ofs[] = { offsetof(BigChar.BigSpace), ... }; uint8_t BigSpace[] = { bcrx_, 0 }; uint8_t BigComma[] = { // ',' bcrx_32, 38, bcrx_3_4_25, ... }; } BigChar; Такая конструкция возможна? Чтобы в структуре внутри самой себя смещения вычислялись. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 1 июня, 2020 Опубликовано 1 июня, 2020 · Жалоба Или лучше массив смещений отдельно сделать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба Чегой-то не компилируется. /*!***************************************************************************** @brief Character rows indexes @note First index have the number SAMEROWS_MAX */ typedef enum { bcrx_32 = SAMEROWS_MAX, bcrx_26_5_1, bcrx_25_5_2, ... bcrx_1_30_1 } BigCharRowIndx_t; /*!***************************************************************************** @brief Big Characters '...' arrays of rows structure @note in each BigChar: (number_of, ) row_index, ... 0 */ static const struct { uint8_t BigSpace[2] = { // 'space' (default, dummy) bcrx_32, 0 }; uint8_t BigComma[11] = { // ',' 39, bcrx_32, bcrx_3_4_25, 3, bcrx_2_6_24, bcrx_3_5_24, bcrx_4_4_24, bcrx_3_4_25, bcrx_2_4_26, bcrx_2_3_27, 0 }; ... bcrx_11_10_11, 0 }; } BigCharIndx; Source\BigFont.c(319): error: #65: expected a ";" uint8_t BigSpace[2] = { // 'space' (default, dummy) Source\BigFont.c(322): error: #65: expected a ";" uint8_t BigComma[11] = { // ',' Что за холера? Прямо после квадратных скобок подчеркивает ошибку. Не нравится ему, Кейлу, инициализация. И размер посчитал, и не помогло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба Похоже, нужно сначала описать всю структуру, а потом её инициализировать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 2 июня, 2020 Опубликовано 2 июня, 2020 · Жалоба 1 минуту назад, ViKo сказал: Похоже, нужно сначала описать всю структуру, а потом её инициализировать? Да. По образу и подобию static const struct { u8 a[2]; u8 b[3]; }str = { .a = {1, 2}, .b = {3, 4, 5} }; В целом, это даже удобнее. Глазами первоначально виден скелет структуры, а уже отдельно можно смотреть чем она заполнена. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться