FILE *fp;
bitmap_t bmp;
bitmap_t *b = &bmp;
- uint16_t n_colors;
+ uint16_t data_offset, n_colors;
if (argc < 2) {
fprintf (stderr, "Usage: %s file\n", argv[0]);
* read width and height of the image, and the number of colors used;
* ignore the rest
*/
- skip_bytes (fp, 16);
+ skip_bytes (fp, 8);
+ fread (&data_offset, sizeof (uint16_t), 1, fp);
+ skip_bytes (fp, 6);
fread (&b->width, sizeof (uint16_t), 1, fp);
skip_bytes (fp, 2);
fread (&b->height, sizeof (uint16_t), 1, fp);
/*
* Repair endianess.
*/
+ data_offset = le_short(data_offset);
b->width = le_short(b->width);
b->height = le_short(b->height);
n_colors = le_short(n_colors);
b->palette[(int)(i*3+0)] = fgetc(fp);
x=fgetc(fp);
-#if 0
- if ((i%4) == 0)
- putchar ('\t');
- printf ("0x%02X, 0x%02X, 0x%02X,%s",
- b->palette[(int)(i*3+0)],
- b->palette[(int)(i*3+1)],
- b->palette[(int)(i*3+2)],
- ((i%4) == 3) ? "\n" : " "
- );
-#else
- if ((i%8) == 0)
- putchar ('\t');
- printf ("0x0%X%X%X,%s",
+ printf ("%s0x0%X%X%X,%s",
+ ((i%8) == 0) ? "\t" : " ",
(b->palette[(int)(i*3+0)] >> 4) & 0x0F,
(b->palette[(int)(i*3+1)] >> 4) & 0x0F,
(b->palette[(int)(i*3+2)] >> 4) & 0x0F,
- ((i%8) == 7) ? "\n" : " "
+ ((i%8) == 7) ? "\n" : ""
);
-#endif
}
+ /* seek to offset indicated by file header */
+ fseek(fp, (long)data_offset, SEEK_SET);
+
/* read the bitmap; leave room for default color map */
printf ("\n");
printf ("};\n");