Alexandre Brown
05/06/2022, 6:15 PMimport java.awt.Rectangle
import java.awt.image.BufferedImage
import java.io.File
import java.io.RandomAccessFile
import javax.imageio.ImageIO
import javax.imageio.ImageReadParam
import javax.imageio.ImageReader
import kotlin.system.measureTimeMillis
import kotlin.time.TimeSource
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
fun main() {
println("Extracting tile...")
val totalTime = measureTimeMillis {
runBlocking(<http://Dispatchers.IO|Dispatchers.IO>) {
val openTiffTime = TimeSource.Monotonic.markNow()
RandomAccessFile(File("FN1_jpeg_compression.tif"), "r").use {
ImageIO.createImageInputStream(it).use { imageInputStream ->
val imageReader: ImageReader = ImageIO.getImageReaders(imageInputStream)
.next()
.apply {
input = imageInputStream
}
val width = imageReader.getWidth(0)
val height = imageReader.getHeight(0)
println("Initial open of tiff took ${openTiffTime.elapsedNow().inWholeMilliseconds}ms")
println("Tiff Height $width")
println("Tiff Width $height")
val tilesTime = measureTimeMillis {
for (x in 0 until 15) {
for (y in 0 until 15) {
val tileTime = measureTimeMillis {
println("Reading tile...")
val param: ImageReadParam = imageReader.defaultReadParam.apply {
sourceRegion = Rectangle(x, y, 512, 512)
}
val imageTile: BufferedImage = imageReader.read(0, param)
}
println("Read a tile in ${tileTime}ms!")
}
}
}
println("Read all tiles in ${tilesTime}ms")
}
}
}
}
println("Total execution time : ${totalTime}ms")
}
Dependencies :
implementation("com.twelvemonkeys.imageio:imageio-jpeg:3.8.2")
implementation("com.twelvemonkeys.imageio:imageio-tiff:3.8.2")
asad.awadia
05/12/2022, 1:13 AM