Ejemplo n.º 1
0
    def __load_textures__(self, reader: FileStream):
        while True:
            if reader.finished_reading():
                break

            offset = reader.tell()
            im_data = io.BytesIO(reader.read_remaining_bytes())
            try:
                # Load image, flip it, and store it
                im: Image.Image = Image.open(im_data)
                im = im.transpose(Image.FLIP_TOP_BOTTOM)
                self.textures.append(im)

                # For some reason the TGA header flag is not being set correctly for some files so let's save it from the raw TGA header bytes
                self.flags.append(im_data.getbuffer()[17])

                # Figure out where exactly the next image begins
                if im.mode == "RGBA":
                    bytes_per_pixel = RGBA_BYTES_PER_PIXEL
                    im_header_size = RGBA_HEADER_SIZE
                elif im.mode == "P":
                    bytes_per_pixel = P_BYTES_PER_PIXEL
                    im_header_size = P_HEADER_SIZE

                size = (im.width * im.height *
                        bytes_per_pixel) + im_header_size
                reader.seek(offset + size)
                # print(f"[Reading] IDX: {len(self.flags)-1}, Offset: {offset}, Size: {size}, Mode: {im.mode}")
            except IOError:
                print("Couldn't read image")
                break

        # print("READ  ", [im.mode for idx, im in enumerate(self.textures)])
        if not reader.finished_reading():
            self.unparsed_bytes = reader.read_remaining_bytes()
            print(
                "Could not parse all the bytes of the WPG. Unparsed byte count: ",
                len(self.unparsed_bytes))
Ejemplo n.º 2
0
    def __load_from_file__(self, path: Path):
        with open(path, 'rb') as file:
            reader = FileStream(file)

            self.header = reader.read(0x820)
            self.mpeg1_video = reader.read_remaining_bytes()