Mercurial > repos > blastem
annotate img2tiles.py @ 2166:3a6680e9204a
xcftools is no longer packaged by Debian/Ubuntu so switched to imagemagick
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 23 Jul 2022 10:54:07 -0700 |
parents | dbbf0100f249 |
children |
rev | line source |
---|---|
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
1 #!/usr/bin/env python3 |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 from PIL import Image |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 def gchannel(Val): |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 return (Val >> 4) & 0xE |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
7 threshold = 127 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
8 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
9 def get_rgba(im, pixels=None, idx=None, color=None): |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
10 A = 255 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
11 if color is None: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 color = pixels[idx] |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
13 if type(color) == int: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
14 R, G, B = im.getpalette()[color*3:color*3+3] |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 else: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
16 if len(color) == 4: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
17 R, G, B, A = color |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
18 elif len(color) == 3: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
19 R, G, B = color |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
20 else: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
21 L, A = color |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
22 R = G = B = L |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
23 return (R, G, B, A) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
24 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
25 def get_gcolor(im, threshold, pixels=None, idx=None, color=None): |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
26 R,G,B,A = get_rgba(im, pixels, idx, color) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
27 if A > threshold: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
28 return (gchannel(R), gchannel(G), gchannel(B)) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
29 return 0 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
30 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
31 def get_color_info(im, pixels, rng, threshold, exclude={}): |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
32 gencolors = {} |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
33 A = 255 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 pal = None |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
35 transparent = False |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
36 for idx in rng: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
37 gcolor = get_gcolor(im, threshold, pixels, idx) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
38 if type(gcolor) == tuple: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
39 if not gcolor in exclude: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
40 if gcolor in gencolors: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
41 gencolors[gcolor] += 1 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
42 else: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
43 gencolors[gcolor] = 1 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
44 else: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 transparent = True |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
46 glist = [(gencolors[color], color) for color in gencolors] |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
47 glist.sort() |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
48 glist.reverse() |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
49 return glist |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
50 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 def get_color_info_both(im, pixels, rng, threshold, exclude={}): |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
52 gencolors = {} |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
53 A = 255 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
54 pal = None |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
55 transparent = False |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
56 for idx in rng: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
57 gcolor = get_gcolor(im, threshold, pixels, idx) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
58 if type(gcolor) == tuple: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
59 if not gcolor in exclude: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
60 if not gcolor in gencolors: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
61 _,best = best_match(gcolor, (exclude,)) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
62 gencolors[gcolor] = (color_dist(gcolor, best), 1) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
63 else: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
64 (dist, count) = gencolors[gcolor] |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
65 gencolors[gcolor] = (dist, count+1) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
66 else: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
67 transparent = True |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
68 glist = [(gencolors[color][0] * gencolors[color][1], color) for color in gencolors] |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
69 glist.sort() |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
70 glist.reverse() |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
71 |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
72 return glist |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
73 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
74 def make_palette(im, trans_thresh, max_global, max_line): |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
75 pixels = im.getdata() |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
76 (width, height) = im.size |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
77 colors = get_color_info(im, pixels, range(0, height * width), trans_thresh) |
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
78 print(len(colors), 'distinct 9-bit colors in image') |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
79 glob_pal = {} |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
80 print('Static Palette:') |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
81 while len(glob_pal) < max_global and len(colors): |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
82 idx = len(glob_pal) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
83 (count, color) = colors[0] |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
84 print(str(idx) + ':', color) |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
85 glob_pal[color] = idx |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
86 colors = get_color_info_both(im, pixels, range(0, height * width), trans_thresh, glob_pal) |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
87 line_pals = [] |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
88 if max_global < len(colors): |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
89 for line in range(0, height): |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
90 linestart = line * width |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
91 if len(glob_pal): |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
92 linecolors = get_color_info_both(im, pixels, range(linestart, linestart+width), trans_thresh, glob_pal) |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
93 else: |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
94 linecolors = get_color_info(im, pixels, range(linestart, linestart+width), trans_thresh) |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
95 line_pal = {} |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
96 while len(line_pal) < max_line and len(linecolors): |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
97 (score, color) = linecolors[0] |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
98 line_pal[color] = len(line_pal) + max_global |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
99 if len(line_pal) < max_line: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
100 combo = dict(glob_pal) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
101 for color in line_pal: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
102 combo[color] = line_pal[color] |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
103 linecolors = get_color_info_both(im, pixels, range(linestart, linestart+width), trans_thresh, combo) |
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
104 #for idx in range(0, min(max_line, len(linecolors))): |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
105 # (count, color) = linecolors[idx] |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
106 # line_pal[color] = idx + max_global |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
107 line_pals.append(line_pal) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
108 return (glob_pal, line_pals, max_global, max_line) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
109 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
110 def color_dist(a, b): |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
111 (ra, ga, ba) = a |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
112 (rb, gb, bb) = b |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
113 return (ra-rb)**2 + (ga-gb)**2 + (ba-bb)**2 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
114 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
115 def best_match(gpixel, pals): |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
116 bestdist = color_dist((0,0,0), (15, 15, 15)) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
117 bestpalidx = 0 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
118 bestcolor = (0,0,0) |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
119 for i in range(0, len(pals)): |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
120 pal = pals[i] |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
121 for cur in pal: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
122 curdist = color_dist(gpixel, cur) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
123 if curdist < bestdist: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
124 bestdist = curdist |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
125 bestpalidx = pal[cur] |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
126 bestcolor = cur |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
127 return (bestpalidx, bestcolor) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
128 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
129 def trans_image(im, trans_thresh, pal, chunky): |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
130 (global_pal, line_pals, _, _) = pal |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
131 pixels = im.getdata() |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
132 (width, height) = im.size |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
133 gpixels = [] |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
134 A = 255 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
135 pal = None |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
136 x = 0 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
137 y = 0 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
138 numchannels = len(im.getbands()) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
139 offset = 1 if numchannels == 4 or numchannels == 2 else 0 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
140 for pixel in pixels: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
141 if x == width: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
142 x = 0 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
143 y += 1 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
144 if width % 8 and not chunky: |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
145 for i in range(0, 8-(width%8)): |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
146 gpixels.append(0) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
147 gpixel = get_gcolor(im, trans_thresh, color=pixel) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
148 if type(gpixel) == tuple: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
149 if gpixel in global_pal: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
150 val = global_pal[gpixel] |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
151 elif gpixel in line_pals[y]: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
152 val = line_pals[y][gpixel] |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
153 else: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
154 bestpal,color = best_match(gpixel, (global_pal, line_pals[y])) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
155 val = bestpal |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
156 gpixels.append(offset+val) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
157 else: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
158 gpixels.append(gpixel) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
159 x += 1 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
160 if width % 8 and not chunky: |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
161 for i in range(0, 8-(width%8)): |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
162 gpixels.append(0) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
163 width += 8-(width%8) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
164 if height % 8 and not chunky: |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
165 for y in range(0, 8-(height%8)): |
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
166 for x in range(0, width): |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
167 gpixels.append(0) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
168 height += 8-(height%8) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
169 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
170 return (width, height, gpixels) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
171 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
172 def appendword(b, word): |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
173 b.append(word >> 8) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
174 b.append(word & 0xff) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
175 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
176 def to_tiles(palpix, raw=False, chunky=False, tile_height=8, sprite_order = False): |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
177 (width, height, pixels) = palpix |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
178 b = bytearray() |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
179 if chunky: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
180 if not raw: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
181 appendword(b, width) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
182 appendword(b, height) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
183 for pixel in pixels: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
184 b.append(pixel) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
185 else: |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
186 cwidth = width//8 |
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
187 cheight = height//tile_height |
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
188 words = len(pixels)//4 |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
189 if not raw: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
190 appendword(b, words) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
191 appendword(b, cwidth) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
192 appendword(b, cheight) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
193 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
194 if sprite_order: |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
195 for cx in range(0, cwidth): |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
196 xstart = cx * 8 |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
197 for cy in range(0, cheight): |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
198 startoff = cy*tile_height*width + xstart |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
199 for row in range(0, tile_height): |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
200 rowoff = startoff + row*width |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
201 for bytecol in range(0, 4): |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
202 boff = bytecol * 2 + rowoff |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
203 #print('boff:', boff, 'len(pixels)', len(pixels), 'cx', cx, 'cy', cy, 'cwidth', cwidth, 'cheight', cheight) |
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
204 #print('pixels[boff]:', pixels[boff]) |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
205 b.append(pixels[boff] << 4 | pixels[boff+1]) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
206 else: |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
207 for cy in range(0, cheight): |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
208 ystart = cy*tile_height*width |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
209 for cx in range(0, cwidth): |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
210 startoff = (cx*8) + ystart |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
211 for row in range(0, tile_height): |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
212 rowoff = startoff + row*width |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
213 for bytecol in range(0, 4): |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
214 boff = bytecol * 2 + rowoff |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
215 #print('boff:', boff, 'len(pixels)', len(pixels), 'cx', cx, 'cy', cy, 'cwidth', cwidth, 'cheight', cheight) |
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
216 #print('pixels[boff]:', pixels[boff]) |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
217 b.append(pixels[boff] << 4 | pixels[boff+1]) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
218 return b |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
219 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
220 def add_pal_entries(tiles, pal): |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
221 (global_pal, line_pals, max_global, max_line) = pal |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
222 tiles.append(max_global) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
223 tiles.append(max_line) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
224 pal_list = [(0, 0, 0)] * max_global |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
225 for entry in global_pal: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
226 pal_list[global_pal[entry]] = entry |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
227 for entry in pal_list: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
228 (R, G, B) = entry |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
229 tiles.append(B) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
230 tiles.append(G << 4 | R) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
231 for line in line_pals: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
232 pal_list = [(0, 0, 0)] * max_line |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
233 for entry in line: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
234 pal_list[line[entry]-max_global] = entry |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
235 for entry in pal_list: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
236 (R, G, B) = entry |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
237 tiles.append(B) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
238 tiles.append(G << 4 | R) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
239 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
240 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
241 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
242 def main(argv): |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
243 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
244 posargs = [] |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
245 omit_pal = raw = chunky = False |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
246 expect_option = None |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
247 options = {} |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
248 tile_height = 8 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
249 sprite_order = False |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
250 for i in range(1, len(argv)): |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
251 if argv[i].startswith('-'): |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
252 if argv[i] == '-r': |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
253 raw = True |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
254 elif argv[i] == '-p': |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
255 omit_pal = True |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
256 elif argv[i] == '-o': |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
257 sprite_order = True |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
258 elif argv[i] == '-c': |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
259 chunky = True |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
260 elif argv[i] == '-i': |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
261 tile_height = 16 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
262 elif argv[i] == '-s' or argv[i] == '--spec': |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
263 expect_option = 'specfile' |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
264 else: |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
265 print('Unrecognized switch', argv[i]) |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
266 return |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
267 elif not expect_option is None: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
268 options[expect_option] = argv[i] |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
269 expect_option = None |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
270 else: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
271 posargs.append(argv[i]) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
272 if len(posargs) < 2 and not ('specfile' in options and len(posargs) >= 1): |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
273 print("Usage: img2tiles.py [OPTIONS] infile outfile [STATIC_COLORS [DYNAMIC_COLORS]]") |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
274 return |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
275 if 'specfile' in options: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
276 props = open(options['specfile']).read().strip().split(',') |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
277 fname,static_colors,dynamic_colors = props[0:3] |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
278 for prop in props[3:]: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
279 if prop == 'chunky': |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
280 chunky = True |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
281 elif prop == 'raw': |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
282 raw = True |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
283 elif prop == 'nopal': |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
284 omit_pal = True |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
285 elif prop == 'interlace': |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
286 tile_height = 16 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
287 elif prop == 'sprite': |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
288 sprite_order = True |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
289 static_colors = int(static_colors) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
290 dynamic_colors = int(dynamic_colors) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
291 outfile = posargs[0] |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
292 else: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
293 fname = posargs[0] |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
294 outfile = posargs[1] |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
295 static_colors = 8 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
296 dynamic_colors = 8 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
297 if len(posargs) > 2: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
298 static_colors = int(posargs[2]) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
299 dynamic_colors = 16-static_colors |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
300 if len(posargs) > 3: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
301 dynamic_colors = int(posargs[3]) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
302 if dynamic_colors + static_colors > 16: |
2050
dbbf0100f249
Update img2tyles to use Python 3
Michael Pavone <pavone@retrodev.com>
parents:
864
diff
changeset
|
303 print("No more than 16 combined dynamic and static colors are allowed") |
864
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
304 return |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
305 im = Image.open(fname) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
306 pal = make_palette(im, threshold, static_colors, dynamic_colors) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
307 palpix = trans_image(im, threshold, pal, chunky) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
308 tiles = to_tiles(palpix, raw, chunky, tile_height, sprite_order) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
309 if not omit_pal: |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
310 bits = add_pal_entries(tiles, pal) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
311 out = open(outfile, 'wb') |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
312 out.write(tiles) |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
313 |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
314 if __name__ == '__main__': |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
315 import sys |
40703069bb68
Get everything needed to build menu.bin either committed or buildable via the Makefile
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
316 main(sys.argv) |