static void pixels_to_colours(int *colours, unsigned char *pixels, int width, int height, int x) { int i = height; int *colour = colours; unsigned char *rgb = &pixels[3*x]; while (--i>=0) { *colour = palette_getindex(rgb); colour++; rgb += 3*width; } }
size_t ppm_to_bitmap(void **lumpdata, const char *filename) { void *data; size_t size = read_or_die(&data, filename); int i, j, width, height; unsigned char *pixels, *bitmap; pixels = parseppm(data, size, filename, &width, &height); bitmap = xmalloc(width * height); for (j = 0; j < height; j++) for (i = 0; i < width; i++) bitmap[width*j+i] = palette_getindex(&pixels[3*(width*j+i)]); free(data); *lumpdata = bitmap; return width * height; }