1 #!/usr/bin/env python 2 3 import PIL.Image 4 import sys 5 6 def get_image(input_filename, width, height): 7 8 i = PIL.Image.open(input_filename) 9 if i.size != (width, height): 10 i.thumbnail((width, height), PIL.Image.ANTIALIAS) 11 12 # Convert to monochrome. 13 14 i = i.convert("1") 15 16 all_values = [] 17 values = [] 18 last = None 19 x = 0 20 byte = 0 21 22 for value in i.getdata(): 23 24 byte = (byte << 1) + (value == 255 and 1 or 0) 25 x += 1 26 27 if x % 8 == 0: 28 values.append(byte) 29 byte = 0 30 31 if x == width: 32 x = 0 33 byte = 0 34 all_values.append(values) 35 values = [] 36 37 return all_values 38 39 if __name__ == "__main__": 40 import sys, os 41 42 if len(sys.argv) < 3: 43 print sys.argv[0], "<output basename> <image filename>..." 44 sys.exit(1) 45 46 output_basename = sys.argv[1] 47 input_filenames = sys.argv[2:] 48 width = 264 49 height = 176 50 number_of_images = len(input_filenames) 51 52 f = open("%s.c" % output_basename, "wb") 53 54 try: 55 # Write the image data. 56 57 f.write("#include <stdint.h>\n") 58 f.write("const uint8_t image_data[%d][%d][%d] = {\n" % (number_of_images, height, width / 8)) 59 for input_filename in input_filenames: 60 f.write("{\n") 61 data = get_image(input_filename, width, height) 62 for y in range(0, height): 63 values = data[y] 64 f.write("{\n") 65 f.write(", ".join([("0x%02x" % v) for v in values])) 66 f.write("},\n") 67 f.write("},\n") 68 f.write("};\n") 69 70 finally: 71 f.close() 72 73 f = open("%s.h" % output_basename, "wb") 74 75 try: 76 f.write("#include <stdint.h>\n") 77 f.write("extern const uint8_t image_data[%d][%d][%d];\n" % (number_of_images, height, width / 8)) 78 f.write("#define MAX_IMAGE %d\n" % (number_of_images - 1)) 79 f.write("#define NUMBER_OF_IMAGES %d\n" % number_of_images) 80 81 finally: 82 f.close() 83 84 # vim: tabstop=4 expandtab shiftwidth=4