30 if (buffer[0] !=
'B' || buffer[1] !=
'M') {
31 ESP_LOGE(TAG,
"Not a BMP file");
36 size_t file_size =
encode_uint32(buffer[5], buffer[4], buffer[3], buffer[2]);
83 size_t header_size =
encode_uint32(buffer[17], buffer[16], buffer[15], buffer[14]);
84 size_t offset = 14 + header_size;
90 buffer[offset + i * 4 + 1], buffer[offset + i * 4]);
105 ESP_LOGE(TAG,
"Unsupported bits per pixel: %d", this->
bits_per_pixel_);
122 size_t width =
static_cast<size_t>(this->
width_);
123 while (index <
size) {
126 size_t remaining_in_row = width -
x;
127 uint8_t pixels_in_byte = std::min<size_t>(remaining_in_row, 8);
128 bool end_of_row = remaining_in_row <= 8;
130 if (index + needed >
size) {
134 uint8_t current_byte = buffer[index];
135 for (uint8_t i = 0; i < pixels_in_byte; i++) {
137 this->
draw(x + i,
y, 1, 1, c);
151 size_t width =
static_cast<size_t>(this->
width_);
152 size_t last_col = width - 1;
153 while (index <
size) {
157 if (index + needed >
size) {
162 uint8_t color_index = buffer[index];
164 ESP_LOGE(TAG,
"Invalid color index: %u", color_index);
169 uint8_t b = rgb & 0xff;
170 uint8_t g = (rgb >> 8) & 0xff;
171 uint8_t r = (rgb >> 16) & 0xff;
184 size_t width =
static_cast<size_t>(this->
width_);
185 size_t last_col = width - 1;
186 while (index <
size) {
190 if (index + needed >
size) {
194 uint8_t b = buffer[index];
195 uint8_t g = buffer[index + 1];
196 uint8_t r = buffer[index + 2];
209 ESP_LOGE(TAG,
"Unsupported bits per pixel: %d", this->
bits_per_pixel_);