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