#!/usr/bin/env python3 import glob import os from PIL import Image hdrs = [] data = [] imgs = [] def encode_pixels(img): r = '' img = [ (x[0] + x[1] + x[2] > 384 and '1' or '0') for x in img] for i in range(len(img) // 8): c = ''.join(img[i * 8 : i * 8 + 8]) r += '0x%02x, ' % int(c, 2) return r cnt = 0 for fn in sorted(glob.glob('*.png')): print('Processing:', fn) im = Image.open(fn) name = os.path.splitext(fn)[0] w, h = im.size if w % 8 != 0: raise Exception('Width must be divisable by 8! (%s is %dx%d)' % (fn, w, h)) img = list(im.getdata()) hdrs.append('extern const BITMAP bmp_%s;\n' % name) imgs.append('const BITMAP bmp_%s = {%d, %d, bmp_%s_data};\n' % (name, w, h, name)) data.append('const uint8_t bmp_%s_data[] = { %s};\n' % (name, encode_pixels(img))) cnt += 1 with open('../bitmaps.c', 'wt') as f: f.write('#include "bitmaps.h"\n\n') for i in range(cnt): f.write(data[i]) f.write('\n') for i in range(cnt): f.write(imgs[i]) f.close() with open('../bitmaps.h', 'wt') as f: f.write('''#ifndef __BITMAPS_H__ #define __BITMAPS_H__ #include typedef struct { uint8_t width, height; const uint8_t *data; } BITMAP; ''') for i in range(cnt): f.write(hdrs[i]) f.write('\n#endif\n') f.close()