This Windows screensaver uses an source image and animates its hue value (HSV color model). It does so by compiling OpenGL shaders that are executed directly on the video card. Settings are available to customize the animation, the used source image and display settings.
There are two ways to obtain an HsvScreensaver.scr
executable of this project:
- download the latest released binary
- download the source code and compile it yourself (see the build section)
- Copy the
HsvScreensaver.scr
file into%windir%/System32/
- Use the Windows screensaver settings to select
HsvScreensaver
- Windows 7 (might work with XP)
- .NET Framework 2.0
- OpenGL 2.0 compatible video card supporting GLSL 1.1
- 64 bit CPU (an untested 32 bit executable is available)
The screensaver can be customized using the settings dialog that can be opened in the windows screensaver selection dialog.
A click on the penguin at the bottom left disables or enables the penguin. Clicking on the preview at the bottom right opens a fullscreen preview using the selected display mode.
- Image
- Path [String]
- Repeat
- X [+0.01, 50.00]: repeat the image horizontally
- Y [+0.01, 50.00]: repeat the image vertically
- Move
- X [-1.00, +1.00]: moves the images origin point horizontally
- Y [-1.00, +1.00]: moves the images origin point vertivally
- Color Correction
- +RGB: changes the rgb colors of the input image
- R [-1.00, +1.00]: red
- G [-1.00, +1.00]: green
- B [-1.00, +1.00]: blue
- HSV
- H [ 0.00, +3.60]: hue in 1/100 degree
- S [-1.00, +1.00]: saturation
- V [-1.00, +1.00]: value
- RGB: changes the rgb colors of the output image
- R [-1.00, +1.00]: red
- G [-1.00, +1.00]: green
- B [-1.00, +1.00]: blue
- +RGB: changes the rgb colors of the input image
- Display
- Monitors
- X [1, 9]: number of horizontal monitors besides each other
- Y [1, 9]: number of vertical monitors above each other
- Mode {Normal, Mazimized, Fullscreen}: Display mode
- VSync {0, 1}: Changing this setting is disabled, because it might overheat the video card if disabled. It can only be enabled manually in the settings file.
- Monitors
- Hue Animation
- Speed [-50.0, +50.0]: animation speed in °/s (scales per axis individually with X/Y, Monitors and Repeat)
- Intensity [0.0, 100.0]: percentage of blending with the unaltered source image (0.0 := source image)
- X [-20.0, +20.0]: increases the hue value based on the x-coordinate (this creates a horizontal rainbow effect)
- Y [-20.0, +20.0]: increases the hue value based on the y-coordinate (this creates a vertical rainbow effect)
- Random Init {0, 1}: screensaver starts with a random hue value
The setting will be saved in the config.xml
file in the settings directory.
On Windows 7 the settings directory is: %userprofile%/AppData/Roaming/blackpinguin.de/HsvScreensaver/
It's possible to use custom vertex and fragement shaders by creating the files vert.glsl and/or frag.glsl in the settings directory. On older hardware where this screensaver might not be running smoothly, it is advisable to use custom shaders to improve performance. For example, one might remove unused color correction settings from the fragment shader.
Get the C# source code:
git clone https://github.com/Istador/HsvScreensaver.git
In the /Windows/C#/
directory resides a Visual Studio 2015 Community project with the name HsvScreensaver
. Open it in Visual Studio and build it.
The OpenTK 1.1 library and the TextTransform 14.0 executable are given in the /Windows/C#/HsvScreensaver/Libraries/
directory. You might want to change OpenTK to a newer version or use a TextTransform version that better fits your build system.
The following two packages should be automatically downloaded by Visual Studio via NuGet:
- Costura.Fody
- Fody
They are used to package the OpenTK
library into the executable as an ressource, so that it can run independently without deploying it together with additional .dll
files.
It's advisable to have an image with color information and varying saturations, because changing the hue of an greyscale image has no visible effect. The saturation of the image can be changed in the screensaver settings but that is applied to all pixels symetrically (it would affect white pixels a lot).
Here is a simple image I made that you can use:
It uses the Death Star PD logo on a blue background with noise, a textile pattern and a central light spot.
The image should match the display's aspect ratio (or the aspect ratio of one monitor in a multi monitor setup with identical devices ). The following examples were made with an 1280x1024 image for three monitors that were forming one display having a resolution of 3*1280x1024 = 3840x1024.
Settings:
- Hue Animation
- X = 0.50
- Y = 0.30
Animation:
Screenshot:
Settings:
- Hue Animation
- X = 0.25
- Y = 0.00
Animation:
Screenshot:
Settings:
- Hue Animation
- X = 0.00
- Y = 0.00
Animation:
Screenshot: