private Path decompressTile(int tileIndex, int level) throws IOException {
Path tileFile = PathUtils.get(cacheDir, PathUtils.getFileNameWithoutExtension(imageFile).toLowerCase() + "_tile_" + String.valueOf(tileIndex) + "_" + String.valueOf(level) + ".tif");
if ((!Files.exists(tileFile)) || (diffLastModifiedTimes(tileFile.toFile(), imageFile.toFile()) < 0L)) {
final OpjExecutor decompress = new OpjExecutor(OpenJpegExecRetriever.getOpjDecompress());
final Map<String, String> params = new HashMap<String, String>() {{
put("-i", GetIterativeShortPathNameW(imageFile.toString()));
put("-r", String.valueOf(level));
put("-l", "20");
}};
String tileFileName;
if (org.apache.commons.lang.SystemUtils.IS_OS_WINDOWS && (tileFile.getParent() != null)) {
tileFileName = Utils.GetIterativeShortPathNameW(tileFile.getParent().toString()) + File.separator + tileFile.getName(tileFile.getNameCount()-1);
}
else {
tileFileName = tileFile.toString();
}
params.put("-o", tileFileName);
params.put("-t", String.valueOf(tileIndex));
params.put("-p", String.valueOf(DataBuffer.getDataTypeSize(this.getSampleModel().getDataType())));
params.put("-threads", "ALL_CPUS");
if (decompress.execute(params) != 0) {
logger.severe(decompress.getLastError());
tileFile = null;
} else {
logger.fine("Decompressed tile #" + String.valueOf(tileIndex) + " @ resolution " + String.valueOf(level));
}
}
return tileFile;
}