コード例 #1
0
def run(infile, outfile, options):
    x, y = options.origin
    w = min(32 - x, options.size[0])
    h = min(24 - y, options.size[1])

    if infile[-4:].lower() == '.scr':
        scr = read_bin_file(infile, 6912)
        snapshot = [0] * 65536
        snapshot[16384:16384 + len(scr)] = scr
    else:
        snapshot = get_snapshot(infile)

    for spec in options.pokes:
        poke(snapshot, spec)

    scrshot = _get_screenshot(snapshot[16384:23296], x, y, w, h)

    if options.invert:
        for row in scrshot:
            for udg in row:
                if udg.attr & 128:
                    udg.data = [b^255 for b in udg.data]
                    udg.attr &= 127

    flip_udgs(scrshot, options.flip)
    rotate_udgs(scrshot, options.rotate)

    _write_image(scrshot, outfile, options.scale, options.animated)
コード例 #2
0
ファイル: test_graphics.py プロジェクト: sbaldovi/skoolkit
    def test_rotate_udgs_with_duplicates(self):
        base_udg = Udg(1, [2, 3, 5, 7, 11, 13, 17, 19])
        udg = base_udg.copy()

        udgs = [[udg, udg]]
        rotate_udgs(udgs, 1)
        udg_r = base_udg.copy()
        udg_r.rotate(1)
        self.assertEqual([[udg_r], [udg_r]], udgs)
コード例 #3
0
ファイル: test_graphics.py プロジェクト: skoolkid/skoolkit
    def test_rotate_udgs_with_duplicates(self):
        base_udg = Udg(1, [2, 3, 5, 7, 11, 13, 17, 19])
        udg = base_udg.copy()

        udgs = [[udg, udg]]
        rotate_udgs(udgs, 1)
        udg_r = base_udg.copy()
        udg_r.rotate(1)
        self.assertEqual([[udg_r], [udg_r]], udgs)
コード例 #4
0
ファイル: sna2img.py プロジェクト: sbaldovi/skoolkit
def run(infile, outfile, options):
    if options.binary or options.org is not None:
        snapshot = read_bin_file(infile, 49152)
        if options.org is None:
            org = 65536 - len(snapshot)
        else:
            org = options.org
        snapshot = [0] * org + list(snapshot) + [0] * (65536 - org -
                                                       len(snapshot))
    elif infile[-4:].lower() == '.scr':
        scr = read_bin_file(infile, 6912)
        snapshot = [0] * 65536
        snapshot[16384:16384 + len(scr)] = scr
    elif infile[-4:].lower() in ('.sna', '.szx', '.z80'):
        snapshot = get_snapshot(infile)
    else:
        try:
            snapshot = BinWriter(infile, fix_mode=options.fix_mode).snapshot
        except SkoolKitError:
            raise
        except:
            raise SkoolKitError(
                'Unable to parse {} as a skool file'.format(infile))

    for spec in options.moves:
        move(snapshot, spec)
    for spec in options.pokes:
        poke(snapshot, spec)

    if options.macro is not None:
        match = re.match('(#?)(FONT|SCR|UDG|UDGARRAY)([^A-Z]|$)',
                         options.macro)
        if match:
            macro = match.group(2)
            try:
                frame = MACROS[macro](snapshot, options.macro[match.end(2):])
            except skoolmacro.MacroParsingError as e:
                raise SkoolKitError('Invalid #{} macro: {}'.format(
                    macro, e.args[0]))
        else:
            raise SkoolKitError('Macro must be #FONT, #SCR, #UDG or #UDGARRAY')
    else:
        (x, y), (w, h) = options.origin, options.size
        frame = Frame(scr_udgs(snapshot, x, y, w, h), options.scale)

    if options.invert:
        for row in frame.udgs:
            for udg in row:
                if udg.attr & 128:
                    udg.data = [b ^ 255 for b in udg.data]
                    udg.attr &= 127

    flip_udgs(frame.udgs, options.flip)
    rotate_udgs(frame.udgs, options.rotate)

    _write_image(frame, outfile, options.animated)
コード例 #5
0
ファイル: test_graphics.py プロジェクト: sbaldovi/skoolkit
    def test_rotate_udgs_with_rows_of_different_sizes(self):
        base_udg1 = Udg(1, [170] * 8)
        base_udg2 = Udg(2, [85] * 8)

        udg1 = base_udg1.copy()
        udg2 = base_udg2.copy()
        udg1_r1 = Udg(1, [255, 0] * 4)
        udg2_r1 = Udg(2, [0, 255] * 4)
        udgs = [[udg1], [udg2, udg1]]
        rotate_udgs(udgs, 1)
        self.assertEqual([[udg2_r1, udg1_r1], [udg1_r1]], udgs)

        udg1 = base_udg1.copy()
        udg2 = base_udg2.copy()
        udg1_r3 = Udg(1, [0, 255] * 4)
        udg2_r3 = Udg(2, [255, 0] * 4)
        udgs = [[udg1, udg2], [udg2]]
        rotate_udgs(udgs, 3)
        self.assertEqual([[udg2_r3], [udg1_r3, udg2_r3]], udgs)
コード例 #6
0
ファイル: test_graphics.py プロジェクト: skoolkid/skoolkit
    def test_rotate_udgs_with_rows_of_different_sizes(self):
        base_udg1 = Udg(1, [170] * 8)
        base_udg2 = Udg(2, [85] * 8)

        udg1 = base_udg1.copy()
        udg2 = base_udg2.copy()
        udg1_r1 = Udg(1, [255, 0] * 4)
        udg2_r1 = Udg(2, [0, 255] * 4)
        udgs = [[udg1], [udg2, udg1]]
        rotate_udgs(udgs, 1)
        self.assertEqual([[udg2_r1, udg1_r1], [udg1_r1]], udgs)

        udg1 = base_udg1.copy()
        udg2 = base_udg2.copy()
        udg1_r3 = Udg(1, [0, 255] * 4)
        udg2_r3 = Udg(2, [255, 0] * 4)
        udgs = [[udg1, udg2], [udg2]]
        rotate_udgs(udgs, 3)
        self.assertEqual([[udg2_r3], [udg1_r3, udg2_r3]], udgs)
コード例 #7
0
ファイル: sna2img.py プロジェクト: skoolkid/skoolkit
def run(infile, outfile, options):
    if options.binary or options.org is not None or infile[-4:].lower() in ('.sna', '.szx', '.z80'):
        snapshot = make_snapshot(infile, options.org)[0]
    elif infile[-4:].lower() == '.scr':
        snapshot = make_snapshot(infile, 16384)[0]
    else:
        try:
            snapshot = BinWriter(infile, fix_mode=options.fix_mode).snapshot
        except SkoolKitError:
            raise
        except:
            raise SkoolKitError('Unable to parse {} as a skool file'.format(infile))

    for spec in options.moves:
        move(snapshot, spec)
    for spec in options.pokes:
        poke(snapshot, spec)

    if options.macro is not None:
        match = re.match('(#?)(FONT|SCR|UDG|UDGARRAY)([^A-Z]|$)', options.macro)
        if match:
            macro = match.group(2)
            try:
                frame = MACROS[macro](snapshot, options.macro[match.end(2):])
            except skoolmacro.MacroParsingError as e:
                raise SkoolKitError('Invalid #{} macro: {}'.format(macro, e.args[0]))
        else:
            raise SkoolKitError('Macro must be #FONT, #SCR, #UDG or #UDGARRAY')
    else:
        (x, y), (w, h) = options.origin, options.size
        frame = Frame(scr_udgs(snapshot, x, y, w, h), options.scale)

    if options.invert:
        for row in frame.udgs:
            for udg in row:
                if udg.attr & 128:
                    udg.data = [b^255 for b in udg.data]
                    udg.attr &= 127

    flip_udgs(frame.udgs, options.flip)
    rotate_udgs(frame.udgs, options.rotate)

    _write_image(frame, outfile, options.animated)
コード例 #8
0
ファイル: test_graphics.py プロジェクト: sbaldovi/skoolkit
    def test_rotate_udgs(self):
        udg1 = Udg(0, [1, 2, 4, 8, 16, 32, 64, 128],
                   [1, 2, 4, 8, 16, 32, 64, 128])
        udg2 = Udg(0, [1, 2, 3, 4, 5, 6, 7, 8], [2, 4, 6, 8, 10, 12, 14, 16])
        udg3 = Udg(0, [1, 2, 3, 4, 5, 6, 7, 8], [8, 7, 6, 5, 4, 3, 2, 1])
        udg4 = Udg(0, [8, 7, 6, 5, 4, 3, 2, 1],
                   [255, 254, 253, 252, 251, 250, 249, 248])

        udgs = [[udg1.copy(), udg2.copy()], [udg3.copy(), udg4.copy()]]
        rotate_udgs(udgs, 0)
        self.assertEqual(udgs, [[udg1, udg2], [udg3, udg4]])

        udgs = [[udg1.copy(), udg2.copy()], [udg3.copy(), udg4.copy()]]
        rotate_udgs(udgs, 1)
        udg1_r, udg2_r, udg3_r, udg4_r = udg1.copy(), udg2.copy(), udg3.copy(
        ), udg4.copy()
        udg1_r.rotate(1)
        udg2_r.rotate(1)
        udg3_r.rotate(1)
        udg4_r.rotate(1)
        self.assertEqual(udgs, [[udg3_r, udg1_r], [udg4_r, udg2_r]])

        udgs = [[udg1.copy(), udg2.copy()], [udg3.copy(), udg4.copy()]]
        rotate_udgs(udgs, 2)
        udg1_r, udg2_r, udg3_r, udg4_r = udg1.copy(), udg2.copy(), udg3.copy(
        ), udg4.copy()
        udg1_r.rotate(2)
        udg2_r.rotate(2)
        udg3_r.rotate(2)
        udg4_r.rotate(2)
        self.assertEqual(udgs, [[udg4_r, udg3_r], [udg2_r, udg1_r]])

        udgs = [[udg1.copy(), udg2.copy()], [udg3.copy(), udg4.copy()]]
        rotate_udgs(udgs, 3)
        udg1_r, udg2_r, udg3_r, udg4_r = udg1.copy(), udg2.copy(), udg3.copy(
        ), udg4.copy()
        udg1_r.rotate(3)
        udg2_r.rotate(3)
        udg3_r.rotate(3)
        udg4_r.rotate(3)
        self.assertEqual(udgs, [[udg2_r, udg4_r], [udg1_r, udg3_r]])
コード例 #9
0
ファイル: test_graphics.py プロジェクト: skoolkid/skoolkit
    def test_rotate_udgs(self):
        udg1 = Udg(0, [1, 2, 4, 8, 16, 32, 64, 128], [1, 2, 4, 8, 16, 32, 64, 128])
        udg2 = Udg(0, [1, 2, 3, 4, 5, 6, 7, 8], [2, 4, 6, 8, 10, 12, 14, 16])
        udg3 = Udg(0, [1, 2, 3, 4, 5, 6, 7, 8], [8, 7, 6, 5, 4, 3, 2, 1])
        udg4 = Udg(0, [8, 7, 6, 5, 4, 3, 2, 1], [255, 254, 253, 252, 251, 250, 249, 248])

        udgs = [[udg1.copy(), udg2.copy()], [udg3.copy(), udg4.copy()]]
        rotate_udgs(udgs, 0)
        self.assertEqual(udgs, [[udg1, udg2], [udg3, udg4]])

        udgs = [[udg1.copy(), udg2.copy()], [udg3.copy(), udg4.copy()]]
        rotate_udgs(udgs, 1)
        udg1_r, udg2_r, udg3_r, udg4_r = udg1.copy(), udg2.copy(), udg3.copy(), udg4.copy()
        udg1_r.rotate(1)
        udg2_r.rotate(1)
        udg3_r.rotate(1)
        udg4_r.rotate(1)
        self.assertEqual(udgs, [[udg3_r, udg1_r], [udg4_r, udg2_r]])

        udgs = [[udg1.copy(), udg2.copy()], [udg3.copy(), udg4.copy()]]
        rotate_udgs(udgs, 2)
        udg1_r, udg2_r, udg3_r, udg4_r = udg1.copy(), udg2.copy(), udg3.copy(), udg4.copy()
        udg1_r.rotate(2)
        udg2_r.rotate(2)
        udg3_r.rotate(2)
        udg4_r.rotate(2)
        self.assertEqual(udgs, [[udg4_r, udg3_r], [udg2_r, udg1_r]])

        udgs = [[udg1.copy(), udg2.copy()], [udg3.copy(), udg4.copy()]]
        rotate_udgs(udgs, 3)
        udg1_r, udg2_r, udg3_r, udg4_r = udg1.copy(), udg2.copy(), udg3.copy(), udg4.copy()
        udg1_r.rotate(3)
        udg2_r.rotate(3)
        udg3_r.rotate(3)
        udg4_r.rotate(3)
        self.assertEqual(udgs, [[udg2_r, udg4_r], [udg1_r, udg3_r]])