diff options
Diffstat (limited to 'meta/recover.py')
| -rw-r--r-- | meta/recover.py | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/meta/recover.py b/meta/recover.py new file mode 100644 index 0000000..72b3a6c --- /dev/null +++ b/meta/recover.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 + +from pyray import * +import struct +import sys + +img_enc = open(sys.argv[1], "rb").read() + + +blocksize = 16 + +pix = img_enc[0x480:] # offset needs to be blocksize aligned +img_off = 0x0a + +print(len(pix) - img_off, 1920 * 1080) + +blocks = {} +for i in range(0, len(pix)-blocksize+1, blocksize): + block = pix[i:i+blocksize] + if block not in blocks: + blocks[block] = [] + blocks[block].append(i) +blocks_items = [(k,len(v)) for k,v in blocks.items()] +blocks_sorted = sorted(blocks_items, key=lambda x: x[1], reverse=True)[8:] +blocks_top = {k:v for k,v in blocks_sorted} + +imgbuf = [] +for i in range(0, len(pix)-blocksize+1, blocksize): + block = pix[i:i+blocksize] + if block not in blocks_top: + imgbuf += [Color(255, 255, 255, 255)] * blocksize + else: + imgbuf += [Color(0, 0, 0, 255)] * blocksize + +width = 1920 +init_window(1920, 1080, "bmpass") +while not window_should_close(): + while key := get_key_pressed(): + if key == KEY_LEFT: + width -= 1 + elif key == KEY_RIGHT: + width += 1 + elif key == KEY_UP and img_off > 0: + img_off -= 1 + elif key == KEY_DOWN: + img_off += 1 + begin_drawing() + clear_background(GRAY) + height = len(imgbuf) // width + for y in range(height): + for x in range(width): + draw_pixel(x, height - 1 - y, imgbuf[img_off + y * width + x]) + end_drawing() +close_window() + |
