Tuesday, March 27, 2012

Darkness Beyond Limits

A couple of months ago I was keeping my monitor's brightness setting to the maximum and it was normal for me, even in the evening with the lights off. But things have changed a bit with those tablets around - now I'm used to much less brightness than my monitor's setting allows. I like Android with it's apps (like RootDim) that can control backlit and go beyond the limits. So I wanted an app for Windows that can do the same, as my minimum brightness was too bright for night reading - that's how Darkness Beyond Limits was born. Unfortunately, Windows cannot control monitor's brightness like Android can. The only thing you can do is simulate lower brightness, but this won't actually be backlit going darker :( Nevertheless, the result is satisfying - you get much dimmer screen :) There are two possible ways to achieve that and this app (written in Delphi XE, so if you want to make changes (yes, I provide the source code too) you'll need to install it) supports both of them. XE outputs quite big file, but it assures it's Windows 7 compatible, so I preferred it instead of Delphi 7. Darkness Beyond Limits is really easy to use - it has no options and no hotkeys to mess with your other hotkeys, just a tray icon. The main goal here is to be dead simple. The app will remember your last brightness setting and will apply it on startup. So, if you want to start it with Windows, just put a shortcut inside your Startup folder. I've tested Darkness Beyond Limits on 1 PC, 1 netbook and 1 laptop with Windows 8 DP, Windows 7 and Windows XP respectively. It works quite well. Also I've made some power consumption measurements (see bellow). So, how does those methods work? I'll give you an explanation with pros and cons - you decide which method to use:

Method 1 (Power):
This method uses a transparent black canvas over (almost) all of your applications, making them look darker.
Pros:
- You can get almost black screen
- Power consumption can go down a bit, depending on your screen
- Always works
Cons:
- May produce 100% usage of a core under XP and below
- Taskbar stays ontop when clicked once. This can be used as a pro when setting set too low, but otherwise it's pretty irritating. There is a workaround, but it's for Windows Vista and below - un-check "Keep taskbar on top of other windows" option in your taskbar properties.
Method 2 (Gamma):
This method uses Windows' gamma settings to simulate darker screen.
Pros:
- No 100% usage under XP as Power method
- No Taskbar ontop as Power method
Cons:
- Doesn't always work (depends on the drivers)
- Can't go as dark as Power
- No potential power consumption savings
- Improper shutdown of the app will result in brightness level not returning to normal until system reboot or by running again DBL

Switching methods:

The default method is Power. If you want Gamma, after you've run DBL at least 1 time, open DarknessBeyondLimits.ini (should be next to the exe file you ran) and correct Gamma=0 to be Gamma=1. Save. Now when you start DBL it'll use Gamma method. System Tray icon will correspond to the method used.

Systems:

PC: monitor Fujitsu Siemens P20-2 on Windows 8 Developers Preview
Netbook: Acer Aspire One AOA110 on Windows 7
Notebook: Asus X51L on Windows XP

Power Consumption (only on Power method):

PC w/o DBL: 31.3W
PC w DBL: 29.6W
Netbook w/o DBL: 13.6W
Netbook w DBL: 13.6W
Notebook w/o DBL: 19.2W
Notebook w DBL: 37.5W

Note: All systems have their backlit set to minimum. Increased power consumption on Notebook is because of Windows XP using one core on 100% for DBL.

Conclusion:

As you can see from the graphics above, you can get less power usage, no change in it, or get a lot more of it. It really depends on your monitor. Some monitors use less energy when displaying black colors, so the darker the image is, the less power it consumes. If your monitor is not one of those, Power method will not increase power usage, unless you are using Windows XP, so if you are with XP I strongly recommend Gamma method for you. If you are energy saving maniac like me, use Power method (probably you won't be using XP, as it's draining more juice than 7, not to mention 8). If you prefer stability, use Gamma method.

Download:

Binary
Source code