Mercurial > repos > ghero
annotate img2dcolor.py @ 12:580b64af2241
Add support for images that have already had their width cut down in direct color converter. Remove debug print statement.
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 06 Sep 2013 19:13:46 -0700 |
parents | 19226d79f839 |
children |
rev | line source |
---|---|
11
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 from PIL import Image |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 def gchannel(Val): |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 return (Val >> 4) & 0xE |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
7 def gcolor(color): |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
8 if len(color) == 4: |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
9 (R, G, B, A) = color |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
10 else: |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
11 (R, G, B) = color |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 return (gchannel(R), gchannel(G), gchannel(B)) |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
13 |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
14 def trans_image(im): |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 pixels = im.getdata() |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
16 (width, height) = im.size |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
17 gpixels = bytearray() |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
18 A = 255 |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
19 x = 0 |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
20 y = 0 |
12
580b64af2241
Add support for images that have already had their width cut down in direct color converter. Remove debug print statement.
Mike Pavone <pavone@retrodev.com>
parents:
11
diff
changeset
|
21 out_width = width if width <= 198 else width/2 |
11
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
22 for pixel in pixels: |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
23 if x == width: |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
24 x = 0 |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
25 y += 1 |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
26 if x == 0: |
12
580b64af2241
Add support for images that have already had their width cut down in direct color converter. Remove debug print statement.
Mike Pavone <pavone@retrodev.com>
parents:
11
diff
changeset
|
27 pad = 198-out_width |
11
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
28 for i in xrange(0, pad*2): |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
29 gpixels.append(0) |
12
580b64af2241
Add support for images that have already had their width cut down in direct color converter. Remove debug print statement.
Mike Pavone <pavone@retrodev.com>
parents:
11
diff
changeset
|
30 if width == out_width or not (x & 1): |
11
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
31 (R,G,B) = gcolor(pixel) |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
32 gpixels.append(B) |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
33 gpixels.append(G << 4 | R) |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 x += 1 |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
35 return gpixels |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
36 |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
37 def appendword(b, word): |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
38 b.append(word >> 8) |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
39 b.append(word & 0xff) |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
40 |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
41 |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
42 |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
43 def main(argv): |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
44 if len(argv) < 3: |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 print "Not enough arguments" |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
46 return |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
47 fname = argv[1] |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
48 im = Image.open(fname) |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
49 pix = trans_image(im) |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
50 out = open(argv[2], 'wb') |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 out.write(pix) |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
52 |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
53 if __name__ == '__main__': |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
54 import sys |
19226d79f839
Add direct color DMA demo and converter
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
55 main(sys.argv) |