How To: Convert an RGB888 image to RGB565 in C

Published 24 March 2017 under software

Here's some C code to convert RGB888 to RGB565.

#include <stdio.h>
#include <assert.h>
#include <stdint.h>

uint16_t rgb888torgb565(uint8_t *rgb888Pixel)
{
    uint8_t red   = rgb888Pixel[0];
    uint8_t green = rgb888Pixel[1];
    uint8_t blue  = rgb888Pixel[2];

    uint16_t b = (blue >> 3) & 0x1f;
    uint16_t g = ((green >> 2) & 0x3f) << 5;
    uint16_t r = ((red >> 3) & 0x1f) << 11;

    return (uint16_t) (r | g | b);
}

int main(void) {

  FILE *fb = fopen("input.rgb", "rb");
  assert(fb);

  FILE *tmp = fopen("output.rgb565", "wb");
  assert(tmp);

  uint8_t i[3];
  while (!feof(fb)) {
    fread(i, sizeof(uint8_t), 3, fb);
    uint16_t x = rgb888torgb565(i);
    fwrite(&x, sizeof(uint16_t), 1, tmp);
  }

  fclose(fb);
  fclose(tmp);

  return 0;
}

Comments

blog comments powered by Disqus