Atmosphere/utilities/insert_splash_screen.py

44 lines
1.3 KiB
Python

from PIL import Image
import sys, os
from struct import pack as pk
SPLASH_SCREEN_WIDTH = 1280
SPLASH_SCREEN_HEIGHT = 720
SPLASH_SCREEN_STRIDE = 768
def convert_image(image_fn):
splash = Image.open(image_fn, 'r')
w, h = splash.size
if w == 1280 and h == 720:
splash = splash.transpose(Image.ROTATE_90)
w, h = splash.size
assert w == 720
assert h == 1280
splash = splash.convert('RGBA')
splash_bin = b''
for row in range(SPLASH_SCREEN_WIDTH):
for col in range(SPLASH_SCREEN_HEIGHT):
r, g, b, a = splash.getpixel((col, row))
splash_bin += pk('<BBBB', b, g, r, a)
splash_bin += b'\x00' * ((SPLASH_SCREEN_STRIDE - SPLASH_SCREEN_HEIGHT) * 4)
return splash_bin
def main(argc, argv):
if argc != 3:
print('Usage: %s image package3' % argv[0])
return 1
with open(argv[2], 'rb') as f:
package3 = f.read()
assert package3[:4] == b'PK31'
assert len(package3) == 0x800000
splash_bin = convert_image(argv[1])
assert len(splash_bin) == 0x3C0000
with open(argv[2], 'wb') as f:
f.write(package3[:0x400000])
f.write(splash_bin)
f.write(package3[0x7C0000:])
return 0
if __name__ == '__main__':
sys.exit(main(len(sys.argv), sys.argv))