import VASSAL.tools.image
import VASSAL.tools.io
import VASSAL.tools.lang
import java.awt
import java.awt.image
import java.io
import java.lang
import java.util
import java.util.concurrent
import jpype.protocol
import typing



class FileArchiveImageTiler:
    def __init__(self): ...
    def run(self, fileArchive: VASSAL.tools.io.FileArchive, string: str, int: int, int2: int, stringArray: typing.List[str], executorService: java.util.concurrent.ExecutorService, imageLoader: VASSAL.tools.image.ImageLoader, tileSlicer: typing.Union['TileSlicer', typing.Callable], callback: typing.Union[VASSAL.tools.lang.Callback[str], typing.Callable[[str], None]], callback2: typing.Union[VASSAL.tools.lang.Callback[None], typing.Callable[[None], None]], callback3: typing.Union[VASSAL.tools.lang.Callback[None], typing.Callable[[None], None]]) -> None: ...

class ImageTileDiskCache(VASSAL.tools.image.ImageTileSource, VASSAL.tools.io.FileStore):
    def __init__(self, string: str): ...
    def close(self) -> None: ...
    def contains(self, string: str) -> bool: ...
    @typing.overload
    def getFiles(self) -> java.util.List[str]: ...
    @typing.overload
    def getFiles(self, string: str) -> java.util.List[str]: ...
    def getInputStream(self, string: str) -> java.io.InputStream: ...
    def getMTime(self, string: str) -> int: ...
    def getSize(self, string: str) -> int: ...
    def getTile(self, string: str, int: int, int2: int, double: float) -> java.awt.image.BufferedImage: ...
    def getTileSize(self, string: str, int: int, int2: int, double: float) -> java.awt.Dimension: ...
    def isClosed(self) -> bool: ...
    def tileExists(self, string: str, int: int, int2: int, double: float) -> bool: ...

class ImageToTiles:
    def __init__(self): ...
    @staticmethod
    def main(stringArray: typing.List[str]) -> None: ...

class TileNotFoundException(VASSAL.tools.image.ImageNotFoundException):
    @typing.overload
    def __init__(self, file: typing.Union[java.io.File, jpype.protocol.SupportsPath]): ...
    @typing.overload
    def __init__(self, file: typing.Union[java.io.File, jpype.protocol.SupportsPath], throwable: java.lang.Throwable): ...
    @typing.overload
    def __init__(self, string: str): ...
    @typing.overload
    def __init__(self, string: str, int: int, int2: int, double: float, throwable: java.lang.Throwable): ...
    @typing.overload
    def __init__(self, string: str, throwable: java.lang.Throwable): ...

class TileSlicer:
    def slice(self, bufferedImage: java.awt.image.BufferedImage, string: str, string2: str, int: int, int2: int, executorService: java.util.concurrent.ExecutorService, callback: typing.Union[VASSAL.tools.lang.Callback[None], typing.Callable[[None], None]]) -> None: ...

class TileToImage:
    def __init__(self): ...
    @staticmethod
    def main(stringArray: typing.List[str]) -> None: ...

class TileUtils:
    @typing.overload
    @staticmethod
    def read(file: typing.Union[java.io.File, jpype.protocol.SupportsPath]) -> java.awt.image.BufferedImage: ...
    @typing.overload
    @staticmethod
    def read(inputStream: java.io.InputStream) -> java.awt.image.BufferedImage: ...
    @typing.overload
    @staticmethod
    def read(string: str) -> java.awt.image.BufferedImage: ...
    @typing.overload
    @staticmethod
    def size(file: typing.Union[java.io.File, jpype.protocol.SupportsPath]) -> java.awt.Dimension: ...
    @typing.overload
    @staticmethod
    def size(inputStream: java.io.InputStream) -> java.awt.Dimension: ...
    @typing.overload
    @staticmethod
    def size(string: str) -> java.awt.Dimension: ...
    @typing.overload
    @staticmethod
    def tileCount(int: int, int2: int, int3: int, int4: int) -> int: ...
    @typing.overload
    @staticmethod
    def tileCount(dimension: java.awt.Dimension, dimension2: java.awt.Dimension) -> int: ...
    @typing.overload
    @staticmethod
    def tileCountAtScale(int: int, int2: int, int3: int, int4: int, int5: int) -> int: ...
    @typing.overload
    @staticmethod
    def tileCountAtScale(dimension: java.awt.Dimension, dimension2: java.awt.Dimension, int: int) -> int: ...
    @staticmethod
    def tileName(string: str, int: int, int2: int, int3: int) -> str: ...
    @typing.overload
    @staticmethod
    def write(bufferedImage: java.awt.image.BufferedImage, file: typing.Union[java.io.File, jpype.protocol.SupportsPath]) -> None: ...
    @typing.overload
    @staticmethod
    def write(bufferedImage: java.awt.image.BufferedImage, outputStream: java.io.OutputStream) -> None: ...
    @typing.overload
    @staticmethod
    def write(bufferedImage: java.awt.image.BufferedImage, string: str) -> None: ...

class TilesToImage:
    def __init__(self): ...
    @staticmethod
    def main(stringArray: typing.List[str]) -> None: ...

class ZipFileImageTiler:
    def __init__(self): ...
    @staticmethod
    def main(stringArray: typing.List[str]) -> None: ...

class ZipFileImageTilerState:
    STARTING_IMAGE: typing.ClassVar[int] = ...
    TILE_WRITTEN: typing.ClassVar[int] = ...
    TILING_FINISHED: typing.ClassVar[int] = ...

class TileSlicerImpl(TileSlicer):
    def __init__(self): ...
    def slice(self, bufferedImage: java.awt.image.BufferedImage, string: str, string2: str, int: int, int2: int, executorService: java.util.concurrent.ExecutorService, callback: typing.Union[VASSAL.tools.lang.Callback[None], typing.Callable[[None], None]]) -> None: ...


class __module_protocol__(typing.Protocol):
    # A module protocol which reflects the result of ``jp.JPackage("VASSAL.tools.image.tilecache")``.

    FileArchiveImageTiler: typing.Type[FileArchiveImageTiler]
    ImageTileDiskCache: typing.Type[ImageTileDiskCache]
    ImageToTiles: typing.Type[ImageToTiles]
    TileNotFoundException: typing.Type[TileNotFoundException]
    TileSlicer: typing.Type[TileSlicer]
    TileSlicerImpl: typing.Type[TileSlicerImpl]
    TileToImage: typing.Type[TileToImage]
    TileUtils: typing.Type[TileUtils]
    TilesToImage: typing.Type[TilesToImage]
    ZipFileImageTiler: typing.Type[ZipFileImageTiler]
    ZipFileImageTilerState: typing.Type[ZipFileImageTilerState]
