return r, g, b
-def translate_rgba(data):
- r, g, b, a = data
+def translate_r5g6b5(data):
+ value, = struct.unpack_from("H", data)
+ r = ((value >> 11) & 0x1f)*0xff/0x1f
+ g = ((value >> 5) & 0x3f)*0xff/0x3f
+ b = ((value >> 0) & 0x1f)*0xff/0x1f
+ a = 255
return [[(r, g, b, a)]]
+def translate_a8r8g8b8(data):
+ b, g, r, a = struct.unpack_from("BBBB", data)
+ return [[(r, g, b, a)]]
+
+
+def translate_x8r8g8b8(data):
+ b, g, r, x = struct.unpack_from("BBBB", data)
+ a = 255
+ return [[(r, g, b, a)]]
+
+def translate_r8g8b8a8(data):
+ r, g, b, a = struct.unpack_from("BBBB", data)
+ return [[(r, g, b, a)]]
def translate_ycbcr(data):
- y1, u, y2, v = data
+ y1, u, y2, v = struct.unpack_from("BBBB", data)
r1, g1, b1 = yuv2rgb(y1, u, v)
r2, g2, b2 = yuv2rgb(y1, u, v)
return [[(r1, g1, b1, 255), (r2, g2, b2, 255)]]
def translate_ycbcr_rev(data):
- v, y2, u, y1 = data
+ v, y2, u, y1 = struct.unpack_from("BBBB", data)
r1, g1, b1 = yuv2rgb(y1, u, v)
r2, g2, b2 = yuv2rgb(y1, u, v)
return [[(r1, g1, b1, 255), (r2, g2, b2, 255)]]
+def translate_x8z24(data):
+ value, = struct.unpack_from("I", data)
+ r = g = b = (value & 0xffffff)*0xff/0xffffff
+ a = 255
+ return [[(r, g, b, a)]]
+
+def translate_s8z24(data):
+ value, = struct.unpack_from("I", data)
+ r = (value & 0xffffff)*0xff/0xffffff
+ g = value >> 24
+ b = 0
+ a = 255
+ return [[(r, g, b, a)]]
+
translate = {
- PIPE_FORMAT_A8R8G8B8_UNORM: (4, 1, 1, translate_rgba),
- PIPE_FORMAT_X8R8G8B8_UNORM: (4, 1, 1, translate_rgba),
- PIPE_FORMAT_B8G8R8A8_UNORM: (4, 1, 1, translate_rgba),
- PIPE_FORMAT_B8G8R8X8_UNORM: (4, 1, 1, translate_rgba),
+ PIPE_FORMAT_A8R8G8B8_UNORM: (4, 1, 1, translate_a8r8g8b8),
+ PIPE_FORMAT_X8R8G8B8_UNORM: (4, 1, 1, translate_x8r8g8b8),
+ PIPE_FORMAT_B8G8R8A8_UNORM: (4, 1, 1, translate_r8g8b8a8),
+ PIPE_FORMAT_B8G8R8X8_UNORM: (4, 1, 1, translate_r8g8b8a8),
+ PIPE_FORMAT_A8B8G8R8_SNORM: (4, 1, 1, translate_r8g8b8a8),
+ PIPE_FORMAT_R5G6B5_UNORM: (2, 1, 1, translate_r5g6b5),
PIPE_FORMAT_YCBCR: (4, 2, 1, translate_ycbcr),
PIPE_FORMAT_YCBCR_REV: (4, 2, 1, translate_ycbcr_rev),
+ PIPE_FORMAT_S8Z24_UNORM: (4, 1, 1, translate_s8z24),
+ PIPE_FORMAT_X8Z24_UNORM: (4, 1, 1, translate_x8z24),
}
def read_header(infile):
return struct.unpack_from(header_fmt, header)
def process(infilename, outfilename):
+ sys.stderr.write("%s -> %s\n" % (infilename, outfilename))
infile = open(infilename, "rb")
format, cpp, width, height = read_header(infile)
- sys.stderr.write("format = %s, cpp = %u, width = %u, height = %u\n" % (formats[format], cpp, width, height))
+ sys.stderr.write(" %ux%ux%ubpp %s\n" % (width, height, cpp*8, formats[format]))
outimage = Image.new(
mode='RGB',
size=(width, height),
color=(0,0,0))
outpixels = outimage.load()
- bsize, bwidth, bheight, translate_func = translate[format]
+ try:
+ bsize, bwidth, bheight, translate_func = translate[format]
+ except KeyError:
+ sys.stderr.write('error: unsupported format %s\n' % formats[format])
+ return
for y in range(0, height, bheight):
for x in range(0, width, bwidth):
- indata = map(ord, infile.read(4))
+ indata = infile.read(bsize)
outdata = translate_func(indata)
for j in range(bheight):
for i in range(bwidth):