Introduction
This article describes an easy approach to implementing
day and night modes of display operation; the example described addresses an
approach to swapping between a custom color scheme and the default color scheme
applied to the operating system and for that reason it could be applied to a
number of different designs. The concept of creating alternative night modes of
operations for displays is not new; it has been around in aircraft and
automobiles for many years. Night modes of display operation offer a way in
which displays may be used in darkness and when interference with the user's
night vision is an issue.
Maintaining night vision requires the avoidance of
light; any source of light can bleach out vision purple and even a dark
accommodated display can cause this reaction quite rapidly. Once destroyed, it
takes about thirty minutes for the human eye to become dark adapted again. While
it is not possible to make a backlit display such as the LCD displays typically
found on laptops and tablets entirely safe for night use, it is possible to
reduce the effect of the emission by darkening the display to the maximum extent
practical.
Altering the color scheme is beneficial but to make the
display safer for night use, it may also be advisable to reduce the brightness
of the illumination source. Military displays intended for use in environments
where night vision imaging systems (NVIS) are to be used with the equipment will
typically offer a mode of operation where the brightness is reduced to eliminate
interference with the use of the NVIS device; this is also typical in
automobiles where turning on the headlights also reduces the brightness of the
illuminated displays in the instrument panel.
The demonstration project only alters the color scheme.
When night mode is selected, the field areas of the controls are converted to
black and most of the foreground color is converted to green. Without regard to
contrast, the human eye is tuned to see the color green better than other colors
and specifically green in about the 450 nanometers of wavelength range. It is no
accident that early display monitors used phosphors that emit light in this
range. As you shift from green to blue-green (e.g., about 480 nanometers of
wavelength) the color becomes more saturated and the contrast ratio declines
which makes characters rendered in this color less legible on a black
background. It is a common misconception that red makes a good color for
rendering text on a black background but red is a highly saturated color and it
too is difficult to read when displayed on a black background due to the
contrast ratio. Naturally white on black or black on white offers the highest
contrast ratio but white is a worst case color for this sort of mode of
operation and should be used sparingly.
Figure 1. Day Use of Sample Application
Figure 2. Night Use of Sample Application
Getting Started
In order to get started, unzip the included project and
open the solution in the Visual Studio 2005 environment. In the solution
explorer, you should note the following:
Figure 3. Solution Explorer
As you can see, there is only a single form contained
in this Windows application project (Form1.vb). The only additional reference
added to the project was System.Drawing.Color; all else is per the default
configuration for a form class.
There is not much to the design of the form; it merely contains a set of
controls used to demonstrate the transition from day to night modes of
operation. These controls do not do anything (unless you are interested in
learning the phonetic alphabet):
Figure 4. The Main Form Designer
The Code: Main Form (frmMain.vb)
The main form class includes one import which is
necessary to support the sample application:
Imports
System.Drawing.Color
The color class import is used to allow the application
to manipulate the control colors.
The first block of code in the application is used to
terminate the demonstration application whenever the user clicks the form's
"Exit" button:
Public
Class Form1
Private Sub
Button1_Click(ByVal sender
As System.Object,
ByVal e As
System.EventArgs)
Handles Button1.Click
Application.Exit()
End Sub
Following the exit button click event handler, the next
block of code is used to handle the click event of the Day mode menu option;
there are a total of three modes of operation (day, night, and auto):
Private
Sub tspDay_Click(ByVal
sender As System.Object,
ByVal e As
System.EventArgs)
Handles tspDay.Click
Me.tspAuto.Checked =
False
Me.tspNight.Checked =
False
Timer1.Enabled =
False
Dim obj As
Object
For Each obj
In Me.Controls
obj.ForeColor =
Control.DefaultForeColor
obj.BackColor =
Control.DefaultBackColor
If TypeOf obj
Is TextBox Then
obj.BackColor =
Color.White
End If
If TypeOf obj
Is ComboBox Then
obj.BackColor =
Color.White
End If
If TypeOf obj
Is ListBox Then
obj.BackColor =
Color.White
End If
Next
Me.BackColor = Control.DefaultBackColor
Me.ForeColor = Control.DefaultForeColor
End
Sub
The code is simple enough, the first part of the block
is used to update the check marks in the menu and to disable a timer control
used to poll for the time whenever the Auto mode of operation is selected. Next,
the control collection is evaluated and the control has its foreground and
background color properties set to the default control foreground and background
colors. Since the text box, combo box, and list box controls are normally white,
the current control is evaluated to see if it falls into one of these three
categories and if it does, the background color is set to white. Lastly, the
form background and foreground colors are also set to the default options. If
you employ other controls on your form with similar requirements, you'd want to
perform similar checks on those controls as well.
The next block of code is used to handle the night menu
option click event:
Private
Sub tspNight_Click(ByVal
sender As System.Object,
ByVal e As
System.EventArgs)
Handles tspNight.Click
Me.tspAuto.Checked =
False
Me.tspDay.Checked =
False
Timer1.Enabled =
False
Dim obj As
Object
For Each obj
In Me.Controls
obj.ForeColor =
Color.Lime
obj.BackColor =
Color.Black
Next
Me.BackColor = Color.Black
Me.ForeColor = Color.Lime
End
Sub
This event handler works pretty much the same as the
day option does, however, all of the controls are set to black backgrounds with
lime green foreground colors.
The last bit of code in the demo is used to implement
the Auto mode of operation. Since I don't have photo sensors installed on my
machine, I have to use some other mechanism to determine whether or not the
display should be set to day or night. I opted to use a timer control for this
purpose; when enabled the timer evaluates the current time to determine if it
should display the form in the night or day mode of operation; the menu click
event handler merely updates the menu and enables the timer; the timer (shown
after this first block) actually does the work of checking the time on interval
and updating the display according to the time of day. In the example shown, the
current hour is evaluated to determine whether or not the time is between 5 PM
and 5 AM:
Private
Sub tspAuto_Click(ByVal
sender As System.Object,
ByVal e As
System.EventArgs)
Handles tspAuto.Click
Me.tspNight.Checked =
False
Me.tspDay.Checked =
False
Timer1.Enabled =
True
End
Sub
Private
Sub Timer1_Tick(ByVal
sender As System.Object,
ByVal e As
System.EventArgs)
Handles Timer1.Tick
If Now.Hour > 17 Or
Now.Hour < 5 Then
'night rules
Dim obj As
Object
For Each obj
In Me.Controls
obj.ForeColor =
Color.Lime
obj.BackColor =
Color.Black
Next
Me.BackColor = Color.Black
Me.ForeColor = Color.Lime
Else
'day rules
Dim obj As
Object
For Each obj
In Me.Controls
obj.ForeColor =
Control.DefaultForeColor
obj.BackColor =
Control.DefaultBackColor
If
TypeOf obj Is
TextBox Then
obj.BackColor
= Color.White
End
If
If
TypeOf obj Is
ComboBox Then
obj.BackColor
= Color.White
End
If
If
TypeOf obj Is
ListBox Then
obj.BackColor
= Color.White
End
If
Next
Me.BackColor = Control.DefaultBackColor
Me.ForeColor = Control.DefaultForeColor
End If
End
Sub
With this mechanization, the display is set to day mode
between 5 AM and 5PM or set to night mode when the time is between 5 PM and 5
AM.
Summary
This article describes an approach to implementing an
alternative color scheme that can quickly be converted back to the current
operating system color settings. The approach demonstrated was described in
terms of providing a night mode of operation for displays used by mobile users
in conditions of darkness. The approach will not eliminate the potential for the
loss of dark adaptation but will reduce the impact of using displays where this
is an issue.