33 lines
1.0 KiB
Python
33 lines
1.0 KiB
Python
|
#!/usr/bin/env python
|
||
|
|
||
|
from sys import argv, stderr, exit
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
if len(argv[1:]) != 1:
|
||
|
print('usage: %s PATH' % argv[0])
|
||
|
exit(0)
|
||
|
path = argv[1]
|
||
|
|
||
|
# we index each pixel into this list to see what value to use
|
||
|
# this should be exactly 4 values in the range 0-3.
|
||
|
# normally you won't want two duplicate values, since this
|
||
|
# will lose information.
|
||
|
translate = [3, 1, 2, 0]
|
||
|
|
||
|
for i, line in enumerate(open(path, 'r')):
|
||
|
toks = line.strip().split()
|
||
|
if len(toks) != 16:
|
||
|
stderr.write('line %d is invalid: %r\n' % (i + 1, line))
|
||
|
exit(1)
|
||
|
bytes = [int(t, 16) for t in toks]
|
||
|
output = [0] * 16
|
||
|
|
||
|
for i in range(0, 8):
|
||
|
for j in range(0, 8):
|
||
|
x = (bytes[i] >> j) & 1
|
||
|
y = (bytes[i + 8] >> j) & 1
|
||
|
z = translate[x + y * 2]
|
||
|
output[i] |= ((z & 1) << j)
|
||
|
output[i + 8] |= (((z & 2) << j) // 2)
|
||
|
print(' '.join(['%02x' % o for o in output]))
|