Junkie
Member
Здравствуйте. как известно bmp файл пишется строка за строкой начиная с нижних строк к верхним, в случае 24бит формата это будут просто данные RGB и их легко считать.
Я отображаю его на адресной ленте, все работает отлично, но картинки нужно заранее поворачивать боком, что лишняя морока, теперь пробуем прочесть файл по столбикам
теперь приходится скакать по строчкам с помощью f.seek, эта функция замедляет чтение почти в два раза.
Можно ли что-то придумать? может какую-нибудь хитрую буферизацию? правда памяти у esp8266 на такое не хватит.
У кого есть идеи?
Может пока не убежали считать соседний столбик в буфер, а потом на следующем шаге пока он отрисовывает читаем уже половинку следующего столбика, и после отрисовки придется дочитать только вторую половину, но затем опять понадобится вычитать сразу два
C:
uint32_t rsiz = w * 3;
if (rsiz % 4 != 0) rsiz += 4 - (rsiz % 4); //выравниваем размер буфера до кратных 4
char row[rsiz];
f.seek(offset, SeekSet); //переходим на начало данных
for (int j = 0; j < h; j++)
{
f.readBytes(row, rsiz); //читаем всю строку
for (int i = 0; i < w; i++) //выводим на ленту
{
byte bB = row[i * 3];
byte bG = row[i * 3 + 1];
byte bR = row[i * 3 + 2];
led_setpx(i, bR, bG, bB);
}
}
C:
for (int j = 0; j < w; j++)
{
for (int i = 0; i < h; i++)
{
if (i == 0)
f.seek(h.offset + i * rsiz + j * 3, SeekSet);
else
f.seek(rsiz - 3, SeekCur);
uint8_t color[3];
f.read(color, 3);
led_setpx(i, color[2], color[1], color[0]);
}
}
Можно ли что-то придумать? может какую-нибудь хитрую буферизацию? правда памяти у esp8266 на такое не хватит.
У кого есть идеи?
Может пока не убежали считать соседний столбик в буфер, а потом на следующем шаге пока он отрисовывает читаем уже половинку следующего столбика, и после отрисовки придется дочитать только вторую половину, но затем опять понадобится вычитать сразу два