К содержимому
  1. Главная
  2. Блог
  3. Формат RGB565 и связанные с ним проблемы

Формат RGB565 и связанные с ним проблемы

6 октября 2014 · По материалам Arducam

Сенсоры поддерживают разные форматы вывода: Raw RGB Bayer, YUV, JPEG, RGB565, RGB555, RGB444 и др. В режиме предпросмотра предпочтителен вывод RGB, а в режиме съёмки формат можно сменить. ЖК-экран на плате-шилде ArduCAM поддерживает только формат RGB565, поэтому для предпросмотра на экране сенсор нужно настроить на вывод в RGB565. Тогда шилд ArduCAM выводит изображение с сенсора прямо на ЖК-экран без участия платы Arduino.

В этом случае данные пикселей с сенсора идут в формате RGB565: один пиксель занимает два последовательных байта, первый байт — R[4:0]G[5:3], второй — G[2:0]B[4:0]. На рисунке ниже — временная диаграмма вывода RGB565 и порядок данных.

Временная диаграмма вывода RGB565

Если при сохранении в файл байты поменяются местами, цвета будут неправильными. Один и тот же кадр с разным порядком байтов сохранится как разные изображения.

Изображение с правильным порядком байтов
Изображение с перепутанным порядком байтов

Иногда порядок последовательных байтов в начале строчного сигнала HREF (Line_valid) неизвестен. Чтобы обойти эту проблему, примеры скетчей ArduCAM перед сохранением в файл считывают из FIFO первый фиктивный байт и так выравнивают порядок байтов.

  //Write the BMP header
  for( i = 0; i < BMPIMAGEOFFSET; i++)
  {
    char ch = pgm_read_byte(&bmp_header[i]);
    buf[k++] = ch;
  }
  outFile.write(buf,k);
  //Read first dummy byte
  //myCAM.read_fifo();

  k = 0;
  //Read 320x240x2 byte from FIFO
  //Save as RGB565 bmp format
  for(i = 0; i < 240; i++)
    for(j = 0; j < 320; j++)
  {
      VH = myCAM.read_fifo();
      VL = myCAM.read_fifo();
      buf[k++] = VL;
      buf[k++] = VH;
      //Write image data to bufer if not full
      if(k >= 256)
      {
        //Write 256 bytes image data to file from buffer
        outFile.write(buf,256);
        k = 0;
      }
  }

Ещё по теме

Запросить цену

Укажите количество — пришлём коммерческое предложение.