Skip to content

Instantly share code, notes, and snippets.

@kiwiandroiddev
Created December 15, 2020 00:33
Show Gist options
  • Save kiwiandroiddev/cc89f2b3294e7de29dd17eead1c3b096 to your computer and use it in GitHub Desktop.
Save kiwiandroiddev/cc89f2b3294e7de29dd17eead1c3b096 to your computer and use it in GitHub Desktop.
Returns an Observable stream of screen grabs using java.awt.Robot. Uses multiple threads to get a somewhat reasonable FPS as per https://github.com/bahusvel/JavaScreenCapture
fun getScreenCaptureSource(
screenRectangle: Rectangle,
numThreads: Int = 6,
fpsPerThread: Int = 8,
robot: Robot = Robot()
): Observable<BufferedImage> {
val periodPerThreadMs: Long = 1000 / fpsPerThread.toLong()
val perThreadOffsetMs: Long = periodPerThreadMs / numThreads
val sources = (0 until numThreads).map { i ->
val initialDelayMs = i * perThreadOffsetMs
Observable.interval(initialDelayMs, periodPerThreadMs, TimeUnit.MILLISECONDS)
.observeOn(Schedulers.newThread())
.map { robot.createScreenCapture(screenRectangle) }
}
return Observable.merge(sources)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment