@Syrion,
Операторы CIRCLE и PAINT были уже в моем первом компьютере БК-0010 еще в древние восьмидесятые:
Я имел ввиду, что символ "°" -- самый обыкновенный символ, есть даже в Блокноте. Может, конкретно в выбранном шрифте дисплея его нет?
Чтобы напечатать символ ° на клавиатуре нужно зажать клавишу ALT и на вспомогательной клавиатуре набрать 0176 и отпустить ALT после этого.
А насчет иконок в "палетках" похоже, что так оно и есть:
для картинки 50х50 точек, 700х16 бит данных маловато

.
Буду искать еще!
UPD1: в принципе, очень экономичный способ: там иконка фактически 50х56, т.е. 2800 пикселей.

В массиве 700х16 = 11200 бит. Получается, что 4бит/пиксель, а это уже 16 цветов/пиксель. Для иконки очень даже достаточно!
Осталось найти способ, как реализовать распаковку в TFT_eSPI.
Буду искать
UPD2: Нашел! Для вывода 8, 4 и 1-битного изображения в TFT-eSPI используется та же функция, какой в итоге пользуемся мы --
pushImage()
Ее вызывает функция pushRect_
SW(), предварительно выставив флаг обмена цветов _swapBytes = true;
/***************************************************************************************
** Function name: push rectangle_SWAP RGB -> BGR
** Description: push 565 pixel colours into a defined area
***************************************************************************************/
void TFT_eSPI:: pushRect_SW(int32_t x, int32_t y, int32_t w, int32_t h, uint16_t *data)
{
bool swap = _swapBytes; _swapBytes = true;
pushImage(x, y, w, h, data);
_swapBytes = swap;
}
Мы используем
16-битный вариант функции:
/***************************************************************************************
** Function name: pushImage
** Description: plot 16-bit colour sprite or image onto TFT
***************************************************************************************/
void TFT_eSPI:: pushImage(int32_t x, int32_t y, int32_t w, int32_t h, uint16_t *data)
Но у нее есть еще много вариантов, в том числе для вывода 8, 4 и 1-битной графики:
/***************************************************************************************
** Function name: pushImage
** Description: plot 8-bit or 4-bit or 1 bit image or sprite using a line buffer
***************************************************************************************/
void TFT_eSPI:: pushImage(int32_t x, int32_t y, int32_t w, int32_t h, const uint8_t *data, bool bpp8, uint16_t *cmap)
***
/***************************************************************************************
** Function name: pushImage
** Description: plot 8-bit or 4-bit or 1 bit image or sprite using a line buffer
***************************************************************************************/
void TFT_eSPI:: pushImage(int32_t x, int32_t y, int32_t w, int32_t h, uint8_t *data, bool bpp8, uint16_t *cmap)
***
/***************************************************************************************
** Function name: pushImage
** Description: plot 8 or 4 or 1 bit image or sprite with a transparent colour
***************************************************************************************/
void TFT_eSPI:: pushImage(int32_t x, int32_t y, int32_t w, int32_t h, uint8_t *data, uint8_t transp, bool bpp8, uint16_t *cmap)
В документации на библиотеку описания не нашел, а в коде самих фукций (в файле
TFT_eSPI.cpp библиотеки) я не до конца разобрался, как она определяет, сколько бит на пиксель??? (С++ не родной язык), но вроде так:
if (bpp8) {
// 8bit per pixel
} else if (cmap != nullptr) {
// 4bit per pixel
} else {
// 1bit per pixel
}
а массив
cmap[...] и есть та самая "палетка" -- таблица соответсвия цветов для 8 и 4х битного изображения (ColorMap ???)
UPD3: нашел содержимое самой палетки для bpp4 на одном из форумов:
uint16_t bit4palette[] = {TFT_BLACK, TFT_GREEN, TFT_RED, TFT_ORANGE, TFT_YELLOW, TFT_BROWN, TFT_BLUE, TFT_PURPLE, TFT_DARKGREY, TFT_WHITE, TFT_CYAN, TFT_MAGENTA, TFT_MAROON, TFT_DARKGREEN, TFT_NAVY, TFT_PINK};
правда, в самой библиотеке есть немного другая (в TFT_eSPI.h):
// Default palette for 4-bit colour sprites
static const uint16_t default_4bit_palette[] PROGMEM = {
TFT_BLACK, // 0 ^
TFT_BROWN, // 1 |
TFT_RED, // 2 |
TFT_ORANGE, // 3 |
TFT_YELLOW, // 4 Colours 0-9 follow the resistor colour code!
TFT_GREEN, // 5 |
TFT_BLUE, // 6 |
TFT_PURPLE, // 7 |
TFT_DARKGREY, // 8 |
TFT_WHITE, // 9 v
TFT_CYAN, // 10 Blue+green mix
TFT_MAGENTA, // 11 Blue+red mix
TFT_MAROON, // 12 Darker red colour
TFT_DARKGREEN,// 13 Darker green colour
TFT_NAVY, // 14 Darker blue colour
TFT_PINK // 15
};