Separated viewport and workspace size; processImage() instead of prepare() and run()