import os
+import base64
+import codecs
+
+def encode_pixels(pixels):
+ from .datafile import Token
+ return Token(codecs.decode(b"="+base64.b64encode(bytes(pixels))+b"=", "ascii"))
+
+def pixels_to_rgba(pixels):
+ return (int(p*255) for p in pixels)
+
+def pixels_to_rgb(pixels):
+ for i in range(0, len(pixels), 4):
+ yield int(pixels[i]*255)
+ yield int(pixels[i+1]*255)
+ yield int(pixels[i+2]*255)
+
+def pixels_to_gray(pixels):
+ for i in range(0, len(pixels), 4):
+ yield int((pixels[i]+pixels[i+1]+pixels[i+2])*255/3)
class TextureExporter:
def __init__(self):
tex_res.statements.append(Statement("storage", Token(fmt), image.size[0], image.size[1]))
+ pixels = tuple(image.pixels)
texdata = ""
if usage=='RGBA':
- for p in image.pixels:
- texdata += "\\x{:02X}".format(int(p*255))
+ texdata = encode_pixels(pixels_to_rgba(pixels))
elif usage=='GRAY':
- for i in range(0, len(image.pixels), 4):
- texdata += "\\x{:02X}".format(image.pixels[i])
+ texdata = encode_pixels(pixels_to_gray(pixels))
else:
- for i in range(0, len(image.pixels), 4):
- for j in range(3):
- texdata += "\\x{:02X}".format(int(image.pixels[i+j]*255))
+ texdata = encode_pixels(pixels_to_rgb(pixels))
tex_res.statements.append(Statement("raw_data", texdata))
return tex_res