32 if (buffer[0] !=
'B' || buffer[1] !=
'M') {
33 ESP_LOGE(TAG,
"Not a BMP file");
38 size_t file_size =
encode_uint32(buffer[5], buffer[4], buffer[3], buffer[2]);
85 size_t header_size =
encode_uint32(buffer[17], buffer[16], buffer[15], buffer[14]);
86 size_t offset = 14 + header_size;
92 buffer[offset + i * 4 + 1], buffer[offset + i * 4]);
107 ESP_LOGE(TAG,
"Unsupported bits per pixel: %d", this->
bits_per_pixel_);
124 size_t width =
static_cast<size_t>(this->
width_);
125 while (index <
size) {
128 size_t remaining_in_row = width -
x;
129 uint8_t pixels_in_byte = std::min<size_t>(remaining_in_row, 8);
130 bool end_of_row = remaining_in_row <= 8;
132 if (index + needed >
size) {
136 uint8_t current_byte = buffer[index];
137 for (uint8_t i = 0; i < pixels_in_byte; i++) {
139 this->
draw(x + i,
y, 1, 1, c);
153 size_t width =
static_cast<size_t>(this->
width_);
154 size_t last_col = width - 1;
155 while (index <
size) {
159 if (index + needed >
size) {
164 uint8_t color_index = buffer[index];
166 ESP_LOGE(TAG,
"Invalid color index: %u", color_index);
171 uint8_t b = rgb & 0xff;
172 uint8_t g = (rgb >> 8) & 0xff;
173 uint8_t r = (rgb >> 16) & 0xff;
186 size_t width =
static_cast<size_t>(this->
width_);
187 size_t last_col = width - 1;
188 while (index <
size) {
192 if (index + needed >
size) {
196 uint8_t b = buffer[index];
197 uint8_t g = buffer[index + 1];
198 uint8_t r = buffer[index + 2];
211 ESP_LOGE(TAG,
"Unsupported bits per pixel: %d", this->
bits_per_pixel_);