Skip to content

Instantly share code, notes, and snippets.

@countingpine
Created January 12, 2019 21:19
Show Gist options
  • Select an option

  • Save countingpine/e94043d783796a881e7183ddd067ae27 to your computer and use it in GitHub Desktop.

Select an option

Save countingpine/e94043d783796a881e7183ddd067ae27 to your computer and use it in GitHub Desktop.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1252"/>
<title></title>
<meta name="generator" content="LibreOffice 4.3.0.4 (Windows)"/>
<meta name="created" content="00:00:00"/>
<meta name="changed" content="00:00:00"/>
<style type="text/css">
@page { size: 21.59cm 27.94cm; margin-left: 3.18cm; margin-right: 3.18cm; margin-top: 2.54cm; margin-bottom: 2.54cm }
p { margin-bottom: 0cm; direction: ltr; color: #00000a; line-height: 120%; text-align: left; widows: 0; orphans: 0 }
p.western { font-family: "Liberation Serif", serif; font-size: 12pt; so-language: en-US }
p.cjk { font-family: "DejaVu Sans"; font-size: 12pt; so-language: zh-CN }
p.ctl { font-family: "DejaVu Sans"; font-size: 12pt; so-language: hi-IN }
</style>
</head>
<body lang="en-US" text="#00000a" dir="ltr">
<p class="western" align="left" style="line-height: 0.21cm"><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Ron
GeryMicrosoft Developer Network Technology Group</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Created:
March 23, 1992</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">There
are two sample applications associated with this technical article.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">MULTIPAL.ZIP</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">DIBIT.ZIP</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.56cm">
<font color="#000000"><font face="Times New Roman, serif"><font size="4" style="font-size: 16pt"><span lang="en-US">Abstract</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">This
article is intended as a full introduction to the Microsoft</span></font></font><font color="#000000"><font size="2" style="font-size: 9pt"><span lang="en-US">&reg;</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
Windows</span></font></font><font color="#000000"><font size="2" style="font-size: 9pt"><span lang="en-US">&trade;</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
Palette Manager. Beyond simply describing the use of the palette
interface, this article attempts to explain its specific internal
workings and gives reasons for its chosen implementation. Due to the
complexity of the Palette Manager, this article gives some topics an
initial explanation and then goes into them in greater detail later
in the article. Because the result is rather long, it is recommended
that you read it start to finish before using it as a reference. For
a less in-depth discussion on using palettes, check out the &quot;Palette
Awareness&quot; technical article on the Microsoft Developer Network
CD (Technical Articles, Windows Articles, GDI Articles).</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>Disclaimer</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
Any and all internal details discussed in this article are
subject to change without notice in future versions of Windows. Any
reliance on these details must be made version-dependent on Windows
versions 3.0 and 3.1.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.56cm">
<font color="#000000"><font face="Times New Roman, serif"><font size="4" style="font-size: 16pt"><span lang="en-US">Overview</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
first part of this two-part article describes the design of the
Microsoft</span></font></font><font color="#000000"><font size="2" style="font-size: 9pt"><span lang="en-US">&reg;</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
Windows</span></font></font><font color="#000000"><font size="2" style="font-size: 9pt"><span lang="en-US">&trade;</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
Palette Manager and the basic process of palette realization.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Terminology</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Before
starting on the meat of this article, some commonly used terms need
to be introduced. They are covered in much greater detail below, but
establishing a working definition early on should help to keep them
easily identifiable throughout.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Hardware
palette. The color lookup table found on the hardware. Pixels on the
screen are indexes into this table on palette-based display adapters.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">System
palette. A copy of the hardware palette maintained by the Palette
Manager. The term is often used in place of &quot;hardware palette&quot;
to discuss the current state of the system's color table.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Logical
palette. A palette object created by an application using the
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>CreatePalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Default
logical palette. The DEFAULT_PALETTE stock object provided by the
graphics device interface (GDI). It contains the VGA colors and is
used for supporting applications that do not explicitly use palettes.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Realization.
The process of mapping a logical palette object to the system
palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Static
colors. Twenty colors found in the system palette that cannot be set
by an application. Sixteen of these colors are common across all
color displays.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Foreground/background.
The currently active application is the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>foreground</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
application, and a palette realized by this application is the
foreground palette. All other applications and the palettes they
realize are considered </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>background</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Foreground
mapping. The way a logical palette is realized in the foreground.
This mapping is constant for the life of the palette and is the basis
for bitmap storage.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Current
index. Index into the system palette to which a given logical palette
entry is currently mapped. This index changes based on the latest
realization of the palette.</span></font></font></p>
<p class="western" align="left" style="line-height: 0.01cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Introduction</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
Windows Palette Manager, an integral part of GDI, was written so that
applications can make use of a class of display adapter hardware that
possesses the ability to display a vast number of colors but is
restricted to only a certain number of colors at any one time. The
design was targeted specifically to 8-bit display adapters with a
hardware palette (or color lookup table) of 256 entries. Every pixel
on the screen is stored as an 8-bit index into the hardware palette.
Each entry in the hardware palette defines a color, usually 24 bits
(8 each of red, green, and blue), although often only 18 bits of
color information are actually used. These displays are known as
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>palette
devices</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
palette solution for display adapters is not a clean one. While
providing the enticement of high color resolution, it does not really
deliver. The future of display hardware, it is hoped, will continue
in the direction of full-color devices, supporting 24 bits of &quot;pure&quot;
color per pixel without the limitation of a color table. In the
current time frame, though, palette devices are a fact of life that
are becoming widely available even on entry-level PC systems.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
fundamental problem posed by a palette device is how do you allow
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>every</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
application to make use of all those available 256 high-resolution
colors? Obviously that is not possible under Windows because Windows
is intended as an environment for running multiple applications at
once. Some priority system needs to be created to ensure that at
least some applications are happy some of the time. That is the role
the Windows Palette Manager plays. It controls the use of the system
palette, the basic premise being that the current active application
has priority over all other applications in setting the system
palette. It also provides an interface for setting and accessing
entries in the system palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
Palette Manager interface is also intended to be </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>device
independent</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
in nature. On nonpalette devices, some of the functions may not
actually perform any work &quot;behind the scenes,&quot; but the
Palette Manager interface makes it possible for an application to
attain access to as much color support as the device can provide.
Devices that do support palettes are identified by having the
RC_PALETTE bit set in the RASTERCAPS value returned from the
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>GetDeviceCaps</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Should
every application make use of the Palette Manager? The answer is no.
Applications that are not especially concerned with color do not need
to deal with palettes. On palette devices, the application simply
gets a color selection similar to that of a VGA device. If that is a
sufficient rainbow for the purposes of your application, ignore this
article.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Note
on VGAs and Palettes</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">While
the standard VGA hardware does have a palette-based design, the
number of available colors (64) and the number of hardware palette
entries (16) are too limiting for use by the Palette Manager. As a
result, the Windows standard VGA driver does not support palettes;
instead, it has a fixed color table of 16 colors. The Windows Palette
Manager cannot be used to alter the colors of this table.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Basic
Design</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Before
going into the basics of the Palette Manager setup, this article
looks at some alternatives to the Palette Manager. One possibility is
to have the hardware palette preset to a color wash that roughly
covers the color spectrum. This is roughly akin to expanding the VGA
hardware palette from 16 colors to 256 colors. Presetting the
hardware palette can achieve very effective dithering and greater
color accuracy for color fills and such. The advantage of a scheme
like this is that it eliminates conflict over the hardware palette.
Although no application can actually get super-accurate colors
(unless they happen to coincide with the predefined 256), all
applications receive a reasonable palette to choose from. The
disadvantage&mdash;a big one&mdash;is that there is no color
accuracy. Even with the larger rainbow, an application cannot hope to
effectively display a scanned image, especially not one with complex
colors like flesh tones. Although images can be dithered with
acceptable results, color information is lost, editing capabilities
disappear, and the dithering process is complex and time consuming.
Any output primitives that are not dithered by the system, including
lines and text, cannot be displayed accurately. The 8514 driver
shipped with Windows version 2.</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>x</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
uses this approach.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
other possibility lies at the other end of the flexibility scale:
Allow the foreground application to control the whole system palette.
In this scheme, the rest of the system needs either to adjust every
time the system palette is changed or simply to make do with
inaccurate colors. In this scenario, the foreground application has
access to 256 distinct colors and can therefore perfectly display an
8-bit image. The rest of the applications and systemwide features
like window borders and menu highlights suffer the consequences.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
Palette Manager provides a compromise between these two extremes. The
system palette is broken up into two sections, one with fixed colors
and one with colors that can be changed by applications. The system
palette predefines 20 entries; these colors are known as the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>static</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
or </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>reserved
colors</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
and consist of the 16 colors found in the Windows version 3.0 VGA
driver and 4 additional colors chosen for their visual appeal. The
DEFAULT_PALETTE stock object is, as the name implies, the default
palette selected into a device context (DC) and consists of these
static colors. Applications can set the remaining 236 colors using
the Palette Manager.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
20 static colors have several uses. They provide VGA color
functionality for any application that does not explicitly use
palettes; a color not based on a palette is mapped to these colors
just as it would be on a VGA device driver, so there are no color
concerns. The window manager component of Windows falls into this
category of applications, and the static colors are used to draw
window borders and other standard pieces. The static colors also
provide a fallback set of colors for palette-using applications that
are not in the foreground and that must match existing system palette
colors. The use of static colors is discussed in greater detail
below.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">An
application can set the 236 nonstatic colors by requesting colors
from the Palette Manager. The active window has the highest priority
in setting these colors. The remaining windows, known as background
windows, receive priority based on the Z-order. Any system entries
not used by a window with a higher priority can be set by these
background windows. Once the system palette has been filled with
requested colors, all subsequent color requests are mapped to the
closest color available in the system palette. Yes, this sounds
complicated. It is discussed in much greater depth below.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
Palette Manager provides VGA-level color to applications that are not
color intensive, while simultaneously providing access to the system
palette for those applications that are concerned with color
accuracy.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Layout
of the System Palette</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
placement of the static colors in the system palette is of some
concern. The most common raster operation (ROP) used under Windows is
the XOR, which is usually used for inverting colors and then
restoring them. To provide VGA-like behavior to the most basic of
operations, the XOR must be made to operate in a consistent fashion.
To accomplish this, the static colors are placed at either end of the
system palette, 10 at the start and 10 at the end. This results in
the inverse index of any one of the static colors being another
static color (0 inverts to 255 and so on). The colors are ordered so
that they match the index order on the VGA and result in the same
inverse order. The 236 settable colors are between the two groups of
static colors.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
diagram in Figure 1 shows the basic layout of the system palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 100%">
<img src="data:image/png;base64,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6RAWAEREREREOoQFABERERGRDmEBQERERESkQ1gAEBERERHpEBYAREREREQ6hAUAEREREZEOYQFARERERKRDWAAQEREREekQFgBERERERDqEBQARERERkQ5hAUBEREREpENYABARERER6RAWAEREREREOoQFABERERGRDmEBQERERESkQ1gAEBERERHpEBYAREREREQ6hAUAEREREZEOYQFARERERKRDWAAQEREREekQFgBERERERDpkfAqArq6u+vr6xsbG4ToYGBg4SoyMJrvkwNzq6upaWlrEBAwNDSd5AkREREQEAwMD9ZK+vr7h+syaNQuBzcLCYjInpifNDYkRc7O1tcUEzM3NJ3kCk2l84nhDQ8O5c+euXLkyXAcTE5NUiZWV1bjsUXuYW3p6em5u7sqVKzGBP/bhJCIiIpq2enp6srOzERrb29uH65OQkIDM5uPjM5kT05PmduPGjbNnz8bExGACHh4ekzyByTTWAqC3t7ezs7O6uvrmzZsnTpwYrpuZmZmzs/O8efPEz+J9gP7+/i4JQjk2GhgYjHoaqCMxDiZjJtHX15ebWltb8/PzcTi9vb2XL18+6l0QERER0eiI1Pf8+fO7d++eOXOmpaVluJ5IcUFBQfb29kh0JiYmYiPSJm6OAInQOJaPkwwODoqhTE1NMb7ygyEIk48ePUJxgvEXLFgw6l3MCGMtAMrLy69fv15WVubq6vrBBx9o6IkDv3//ftQAiYmJLi4u2IJjj9veunVr4cKF2DiWNwfq6uowVHFxcaLE2NhYbnJwcEhJSfH09IyPj5cfRkREREQ0aRD9EdVycnKQud98800NPQcGBs6fPy9CXUhIiJ6U2nNzc3FzLy8vbBzLa/OI/llZWRgqIiICQzk6OspNSInI/QYGBoGBgcrtf0jjUAAcOXKkpqZm3759u3btGq4biq2vv/76m2++Wb16tb+/v1wAZGZmfvfddziukZGRYywAzp49m56ejqINQV+lAFi5cuXy5cuxcfK/gUBEREREKAAyMjIOHjyIxIgCwM7Obriehw8fRmi0tLR0cnJSFgCIkQjo3t7eYy8A/u///m/79u1BQUHKoI+giPFjYmJQoiiT5B/SWAOxeEOnu7sbi4VDNVw38ZkclAHoicJObMQPPT097e3t+D8O7VimgaEwckdHR29vr0oTKjlTU9OxDE5ERERE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" name="Object0" align="left" width="453" height="77" border="0"><br clear="left"><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>Figure
1. The system palette layout</b></span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Table
1 shows the static colors, their logical color values, and the system
palette indexes where they are located. Note that the specific values
(especially for the four non-VGA colors) are specific to Windows
versions 3.0 and 3.1 and may change in future releases.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>Table
1. The Static Colors</b></span></font></font></p>
<p class="western" align="left" style="line-height: 0.02cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>Index</b></span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>Red</b></span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>Green</b></span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>Blue</b></span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>Color</b></span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.37cm; line-height: 0.07cm">
<br/>
</p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">black</span></font></font></p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">1</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0x80</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">dark
red</span></font></font></p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">2</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0x80</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">dark
green</span></font></font></p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">3</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0x80</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0x80</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">dark
yellow</span></font></font></p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">4</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0x80</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">dark
blue</span></font></font></p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">5</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0x80</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0x80</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">dark
magenta</span></font></font></p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">6</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0x80</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0x80</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">dark
cyan</span></font></font></p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">7</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xC0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xC0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xC0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">light
gray</span></font></font></p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">8</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xC0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xDC</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xC0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">money
green</span></font></font></p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">9</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xA6</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xCA</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xF0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">sky
blue</span></font></font></p>
<p class="western" align="left" style="line-height: 0.42cm"><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font></p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">246</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xFF</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xFB</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xF0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">cream</span></font></font></p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">247</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xA0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xA0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xA4</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">light
gray</span></font></font></p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">248</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0x80</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0x80</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0x80</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">medium
gray</span></font></font></p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">249</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xFF</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">red</span></font></font></p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">250</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xFF</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">green</span></font></font></p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">251</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xFF</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xFF</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">yellow</span></font></font></p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">252</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xFF</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">blue</span></font></font></p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">253</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xFF</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xFF</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">magenta</span></font></font></p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">254</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xFF</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xFF</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">cyan</span></font></font></p>
<p class="western" align="left" style="line-height: 0.35cm"><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">255</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xFF</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xFF</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">0xFF</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">white</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">When
a palette driver is first enabled and initialized, the Palette
Manager sets the system palette for that device. The Palette Manager
initializes the nonstatic 236 colors to a rainbow wash that is not
maintained beyond the initialization phase. The rainbow allows colors
placed in the lower nonstatic indexes to XOR better, but the Palette
Manager never uses them for matching purposes.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Simple
Use of a Logical Palette</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Now
that the Palette Manager has the system palette ready for use, it is
up to the application to ask for the colors that it wants to display.
An application requests colors from the Palette Manager by using a
logical palette object. This object is created using the
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>CreatePalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function. It consists of an array of </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>PALETTEENTRY</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
structures that define the colors that are being requested. A palette
object is selected into a DC using the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SelectPalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function. (The </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SelectObject</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function does not work with palettes.) Unlike other logical objects,
a palette object must be explicitly realized by the application using
the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>RealizePalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function. The actual color-matching work is performed during the
realization step.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
following snippet of code creates a simple palette with 64 shades of
blue:</span></font></font></p>
<p class="western" align="left" style="line-height: 0.02cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">HPALETTE
CreateBluePalette()</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">{</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">PLOGPALETTE
pPal;</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">HPALETTE
hLogPal;</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">unsigned
char blue;</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.39cm">
<br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">pPal
= (PLOGPALETTE)LocalAlloc(LMEM_FIXED, sizeof(LOGPAL) +</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">63
* sizeof(PALETTEENTRY));</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
(Extra entry in LOGPAL struct)</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">if
(!pPal)</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">return(NULL);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.39cm">
<br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">pPal-&gt;palVersion
= 0x300;</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">pPal-&gt;palNumEntries
= 64;</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.39cm">
<br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
Brighter shades are placed first for higher priority.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">for
(blue = 255, i = 0; i &lt; 64; blue -= 4, i++)</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">{</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">pPal-&gt;palPalEntry[i].peRed
= </span></font></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">pPal-&gt;palPalEntry[i].peGreen
= </span></font></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">pPal-&gt;palPalEntry[i].peFlags
= 0;</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">pPal-&gt;palPalEntry[i].peBlue
= blue;</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">}</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">hLogPal
= CreatePalette(pPal);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">LocalFree(pPal);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">return(hLogPal);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">}</span></font></font></font></p>
<p class="western" align="left" style="line-height: 0.12cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
following code performs the work necessary to use the palette created
above. Once it is executed, subsequent palette-based drawing will be
relative to this logical palette. These two function calls are
essentially always found as a pair:</span></font></font></p>
<p class="western" align="left" style="line-height: 0.02cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">SelectPalette(hDC,
hBluePal, FALSE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">RealizePalette(hDC);</span></font></font></font></p>
<p class="western" align="left" style="line-height: 0.12cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
selected and realized palette is the palette used for operations to
the screen until a different palette is realized. Output to the
screen using another DC without first realizing a different palette
is affected by the current palette realization without regard to the
palette actually selected into that DC. Inadvertent palette use can
be eliminated by always selecting and realizing the appropriate
palette before drawing and then restoring the previous palette when
the drawing is complete.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Two
distinct calls exist instead of a single select call that implicitly
performs the realization for a simple reason. The reasoning is that
it is valid to request a re-realization of a palette without having
to reselect it. This is plausible when realizing a background palette
in response to a system palette change. It is a good idea, though, to
always pair the calls. Reselecting a palette that is already selected
causes no harm, nor does re-realizing it.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Palette
objects follow most of the same rules as other logical objects. They
should be deleted when no longer needed by using the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>DeleteObject</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function, and they must be deselected from all DCs before being
deleted (by using </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SelectPalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
to select a different palette into the DC). One notable difference is
that an application can select a palette object into more than one DC
(belonging to a single device) at a time, but the palette's
realization remains constant for all of the DCs.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.42cm">
<font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"><b>Default
behavior</b></span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">When
an application does not explicitly select a palette (and before a
palette is initially selected into a DC), a default palette is
selected into the DC. This palette is the DEFAULT_PALETTE stock
object. The default palette contains 20 entries corresponding to the
static colors, and the Palette Manager trivially maps it to the
system palette. All palette management is performed automatically for
an application that does not explicitly use palettes.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.42cm">
<font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"><b>Restoring
the previous palette</b></span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
big question with restoring the previous palette is &quot;Should the
previous palette be realized?&quot; The answer is &quot;It depends.&quot;
The danger is that realizing the previous palette can, in the
foreground case, change the system palette and destroy any work
performed with the new palette. If the previous palette is the
default palette, the correct behavior is to realize the previous
palette&mdash;realizing the default palette does not affect the
system palette. If the previous palette is a potentially harmful
palette to realize, the application can select the palette back into
the DC and force it into the background (</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>bForceBackground</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
parameter set to TRUE) before realizing it to ensure that it does not
affect the new palette's realization work. Simply not realizing the
previous palette is a valid option, but depending on the expectation
of the application that selected that palette in the first place,
this approach could leave the palette hanging without a valid
realization for subsequent drawing.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Basic
Palette Realization</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Once
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>RealizePalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
is called, the real work begins. Unfortunately, there are many little
quirks involved in the realization process, so this section deals
with the vanilla version only. This is the gist of the process.
During selection, the logical palette is marked as being either a
foreground or a background palette. In the simplest case,
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SelectPalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
is called with FALSE as the last parameter. This indicates that the
foreground status of the palette is determined by the state of the
window that owns the given DC. If the window is the current active
window or a descendent of the currently active window, the palette is
a foreground palette. Otherwise the palette is a background palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Each
entry in the system palette can have one state: static, used, or
unused. Static entries cannot be overwritten by a realization and
are, in effect, permanently used. Unused entries can be set in the
realization process. Once set, these entries become used&mdash;subsequent
background realizations cannot overwrite the entry. What separates
used entries from static entries is that a foreground realization
changes all used entries to unused entries.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
critical property of a foreground palette is that, when realized, it
can overwrite all entries other than static in the system palette.
The Palette Manager accomplishes this by marking all of the entries
that are not static in the system palette as unused before the
realization of a foreground palette, thereby eliminating all of the
used entries. No preprocessing is done on the system palette for a
background palette realization. The net effect is that the system
palette is cleared for a foreground palette, but it is left in its
current use state for a background palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Now
it's time for the realization itself. Each color in the logical
palette is color-matched to every color in the system palette. The
closest match is tracked. If an exact match is found, the color is
matched and the entry in the system palette is marked as used. If no
exact match exists, the Palette Manager looks for an entry that is
unused. If one is found, the logical color is set in the system
palette at that entry, and the entry is marked as used. A color in
the system palette has thus been changed. If there are no unused
entries left in the system palette (the palette is full), the logical
color is mapped to the system palette entry with the closest color
match. Notice that the color could be mapped to a color in the system
palette that was set by the same logical palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">In
nonalgorithmic terms, the palette being realized takes up any free
entries that remain in the system palette for its own use. When there
are no more entries to take, the remaining colors in the logical
palette are mapped to the nearest color that is already in the system
palette. The foreground palette gets to set all of the possible
nonstatic colors. Background palettes can only set what remains open
and are prioritized in a first come, first served manner. The
priority queue starts up again the next time a foreground palette is
realized.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Using
symbolically small palettes, Figure 2 shows the realization process
in diagrammatic terms.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 100%">
<img src="data:image/png;base64,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urGxsTNnzpQBEEIIIYQQoUwQDEB6evrJkyd37NhRv379Bg0alEGKqampd+7cqVq16ujRo8sgOSGEEEIIIcotQXsHADkeHR3dv3//ChUqlHZaycnJ+I3STkUIIYQQQojyT9AMQJUqVTp06DB06NAyMABZWVmHDh0q7VSEEEIIIYQo/2gVICGEEEIIIUIIGQAhhBBCCCFCCBkAIYQQQgghQggZACGEEEIIIUIIGQAhhBBCCCFCCBkAIYQQQgghQggZACGEEEIIIUIIGQAhhBBCCCFCCBkAIYQQQgghQggZACGEEEIIIUIIGYCSJzc3N8OhhkOFChWeFPLhw4cEq1SpEsEqV65clpn08PjxY3KSnZ1NTqpXr16oY7OysjiWUnNstWrVSimHRaY4RSsOjx49Il1+kG7VqlXLLF1fAu+QIUheXp6pHLoulUM/KSetJoQQQpQeMgAlDwJiy5YtmzdvHjx48KBBg2rXrv2kkPv37ydkixYtCNmmTZuyzKSHa9eukZPLly+Tk/79+xfq2IsXL3LsvXv3ODY2NraUclhkrl69Svb4n7YobNGKw+nTp0kX8U260dHRZZauL/fv39+6dev27dsHO9SsWTOImSlvZGZmJiYm0lJ9+/alcjgF+B0eHs7v7t27Bzt3QgghRKkgA1DypKenoyE++OCDvLy83r17528Avvjiiz59+kRFRQXdAKxYsSIpKalWrVpFMACLFy/m//r165dPA7B8+fLk5OQiFK04YAAWLFiQnZ3dpEmT4BqABw8ebNq06eOPP65QoUJcXJwMgA0GYNu2bX//+99ff/31nj17njx58ocffqCimjdvLgMghBDiWUUGoFTIzc3Nycnh//yD4RBMMH6UTcbyyYnJc6FycuzYsX379l26dAmBO3jw4K5du5ZeDsOcWyskt3fvXixTTExMgEK2aEUrPibd8tC4YQF3yNDErpzIyMjp06fjh48ePXr37l16Gq4g2BkUQgghShgZAFF0MADffPNNjRo15syZgwGIiIgo1eTS09M3b9786aefvvHGG506ddKVbFHidOzYsXnz5pjM+fPnr1q16q233pIBEEII8ewhAyCKTkZGxo0bNxo0aIAWb9y4cWknl5ube//+/StXrqSmpubk5JR2ciIEqe5Qu3Zt+nZKSgqeM9g5EkIIIUoeGQAhhBBCCCFCCBmA8khubu4lh+zsbHdjrVq1WrVq5fdC+927dwl8584de2PLli0J77uUYU5OjoncXERv1KgRIQubQxMDKXbu3Ll58+b169f3BLhy5QoBMjMz3S3Vq1cnPwT2je3BgwcEvnHjhr2xadOmhDfP+aSlpV2+fPnYsWME409+79ixo2vXruScagk8256KbdCgAUnUrVvXt2iUiMjth5oeP35sdrVo0cJvxeYD9XDZwfzZrFkzYqhRo4ZvSOIn2KNHj9wt1ACBqQ3fwKmpqYS/deuWvZEaJnyAC56mp6ebduQQyhseHu7uunfvHrtu377N70qVKrVyuH79OhupFn6bt9spGluuXbtmAty8eZP8V6tWza3YrKwsU292uvXq1SOAp9uYKiJadtnN6vbYJk2auEW7f/8+gfnfdCoTgDYKc5qVspCEb3npYwSjv5mKJZjfhWvr1Klj3gCmfrZu3WqKVrFixUCqVAghhCj/yACUR9AxCNylS5eaJckNkZGRkydP9msAzp8/T+D9+/fbGydOnEh4X52KuNy+ffuSJUuMykxISHjhhRcKlb28vLy9e/cSQ8OGDceMGdOpU6d27dp5wuzbt48sIQfdLahe8uPXACAfV65cmZiYaG8cMWIE4Y0BIJ7Vq1evWbPmzJkzJnU8z+jRowlQKAOA7t+5cyc5NxUbFxdHDLYBIPLdu3eT8z59+rDLNgAPHz4kh4sXLx43bhw1VigDgE7dsGEDZTR/jhw5khj8GgCKRuqUzt2C9CQnfg0ALmv58uWUyN5IixAelxJIxkzF0ljmENsAIJTJyZ49e8KcRfHJMC144MABaq99+/aENwYAE0LR1q1b94LDoUOHOIrc8ttULOZt06ZNy5Yts9Pt2bMnATwGgGwQjO7kaVYsBKcD6Q4dOpSjjAHAiqxYseLkyZMExhjs2rWLdI2yj4mJmTRpkl8DgIckGL0ozHHIxOZ33Sp6KacPOaE4H330EcFIxW97CSGEEE8jMgDlC6T/nTt3UlJSTjrYBiA3N5ctqDRkkytuUJaEP3HihAlvR2W2ECGBzWVOhBTK8urVqya8MQDExp/sMuIpQJBQv/76K0K2l4O7PScnhyTIkkndNgDEzxZsjMm/+RwV6pDwJ/8XOwmEL1sqVqxIYLKK4CNRAqPR+f/s2bPYBvtKeYEVS62ecHArtk6dOvxGyJKEkbNETirIWbI3fPhwOwaqCPm4atWqtm3bPvfccwGmi22gwj0FbN26NdlAbVMVRlbiTEy9mezZBoAY2ILFIpOENxqdyiSMWxw7RUKaLYTPR7Omp6ebGAjsVqzZRafyNArxmLTQ2WvXrsU4DRkyxASmJlHJVAsqvHPnzuYQugHbMzMziQd36tu4iHhiMz2BVjAbz507t379eroEQt8OTOVwOEalQYMGuD6zkZiTkpKwZNgSDIkpiOnDmAd+Yz+I312El7p1C2UMADnkKILdvn3bs1JTfQfyhlX+5Zdfunbtat+LE0IIIZ52ZADKF/fu3fvtt9+2bNnStGnTt956y37qAMV2+vTpU6dOjRo1CuVtNh45cgS1iu6JjY31CFb07vfff9+zZ0/Co1nDHA2EakfTEPnvf/97I8FRRSSHnvZItKKB5tu6dStZatiw4axZs6pUqeLuMiL+o48+QsORJeNJjNpGIkdFRcXHx9tR3bp1a+XKlUePHiUw4vL5559v3Lgx+Sc8hSWSmJgYtgeYMVOxN27csCuWjdQGsp7Y+vbtW/zi+2I+sECrke5f//pXt2jLly83RevSpUvY/y5wRNEINm/ePPuz0FTplStXPv74YwKTz0qV/u85S2NRFRSne/fuAwcOtFPEdC1ZsqRTp06E79ix45Myhi4nOf5v06bNgAEDevTo4X4h+Pjx40RObzGru4Y5vo62Iw+HDx+m0nxjM7dWKEXLli0nTZpEuvg3eiDx7N+/3y67AY+xb98+9DclKs7HGej5GzZsoMgk8dprr5nKSU1N3b17N5FTAwkJCSbk3r17yQwBSNH4IiqWjvfPf/4TAyN9L4QQIqSQAShfIGi2bdv27bff/u1vf3vxxRfdi6NhzlfD/vGPf+zYsaN169auAUBZLl68GPUz2sGO6sMPP1y2bNnt27d79eplDADCKDExccGCBagxVKaRQchTlDGJZmVlBfjcSD6g8lFa//73v99+++033njD/roZHoP8//zzz82bNx82bJjZeOHCBVQ+UowszZgxw47q66+/xsCgdLs6DB06FK2M5EXGoVZnz57t92miJ4E2RXHioP70pz9xrLkwTNK//PILdd6hQwfXAGBaatWqhVJ8+PBhRkYGf6KMKVdaWlp4eDgHYl1crVwg1D8eA/X8xz/+8c033zQbqZ/vvvuOzHTr1s0YAGogOTl54cKFZG/KlCn2Az/4hPfff3/p0qV4qhEjRhiNe+7cORqX39Tb5MmTPfVGJaOJ8X5+DcDjx49pa5qDdkflkzF6mh0AV0ZyERERRD5+/PgwR6/TdvgKfnCsb5w4BPJJiV5++eWXXnoJ+8HGpKSkjRs3btq0iXjcshvWO1y+fJmeWRwDQANxXnAWUIqZM2eaZ4pWr169du1aXFa7du1cA4DKnz9/Ph1v+vTpffr0YQsOAfVPoSiRFpUSQggRUsgAPDU0adIENRYdHR0TE1OC0UZFRaH/UOro1FJd9LBu3brmWn6/fv3sOwNlA1YKoTlgwABSz+fxfSQ+TuCdd95B7qMjsR8chR+gcg4cOMCBf/7zn+Pj4wN/8aBZs2Ym3d69e+cTrGbNmkOGDKlcuTKBi/k5BXrIa6+9hlto1aqV3wBHjhzB7+EQ4uLicBqYkALjpOAUAdtDPXCsbwCsCFK7v0ODBg2Kk/9CQUOQMZNugO89u5gHioiBElGuUsqhEEIIUQ6RAXhqQKuNGzcuNzfXfj6k+GAA2jrcunXL8xpxyVKvXr2RI0cOGzaskkPpJeQX7MeIESN+97vfUXv5pI4BQBYj1hcsWPA///M/2JXmzZsj4tesWfPLL7/8/ve/f/fdd6tVqxZ4E3D4hAkTpk6dmv8hxgCgYvPPXiBgALp27UpBnpQiBuA///lP48aNKc7w4cMDSQ7Dhs7GGiGyOdw3gDEAf/zjH1HVZdm4tWvXpkdRkCLUW/369ceMGYOdzsnJ2b17dynlUAghhCiHyACULxA0gwYNCnOU6HfffWc/aoJi69mzZ2RkpO9Rly5dWrlypXm10WXbtm2BXNGv6ICoLZFVDqtWrRofH//WW29RkGXLltkatE6dOuTf7/Vm82CPWXHSZefOnXfu3CnCEqV+oT5RsYEs5FLZgdrIysp69OgR6hDTxe/MzEwiIYZCCU1akDop8OK00etw4MCBgwcP2g13/fr148ePB57ik/wVpcDgff3114cOHbp69Sryl+T8LoKZT/aoQ3ulIBv2UswyvrcTeLP6QtNwLHkuWUcthBBClH9kAMoXqOSRI0dGR0cvWrTos88+s4Vgjx49kJJ+DcCFCxcI75FBqamphVrYp0RATg0cOLB79+5LlixZsGCBvbR/mzZtXn/9db8GwLwpu3HjRnsjmff7vumzzd69e7/88kt79SS8B/VQfJGal5e3a9euEydOZGRkhGDFCiGEEMJFBqB8gc5r2LBhrVq1OnXqhIy2lwFt0KDBqVOn1q5diwfo0KGDfVRERES7du38fiIgNjbW74LopUSFChXMEoom/7aQpVDmTkWkg32VGuvSunVrv68g9+7d22+5njEePXpklnhKSUmhKe2XgDFC7CoRL0dN0nPMKxDNmzcnOVqBtnjS2wJCCCGEeCaRASiPYAP69evXpk0be3XCK1eubHWYOXOmxwC0bdt22rRpcXFxvlE1atTI7zekSps+ffqQrv0l4Nu3b5P5jz76aNasWch92wAQcvz48Z5lTA24l+KvTVT+McuA/vDDD4MGDZo3b579kvH58+cXLFiwY8eOYiaBN+vbty+Vb5aWQv1v2bJl9+7dbJEBEEIIIUIKGYCSB/mOwE1ISODH4cOHMzIymjVrZr5oa0DWX3N4+PBh165dO3bs6C788ujRo6tXr968ebN58+YIevu5fPON2D179piXBGzq1q3brVs3z3rw169fJ6rAF6wsEdyiNW7c2Dyz5O46ffr0mjVrELL9+/f3rLqI3u3cubPvevbEQw086aHzUgXjFB0dTe2RB1qwdu3aMTExNEopZSYrK+vcuXOJiYl0m169etFhwpyHuEj90qVLhWrEGzducFS1atWIxP0MVpjzuHzLli3j4+MbNmwY5lgOLGVKSopf3+WB9iJOuhOZDPzja0IIIYQon8gAlDw1atQYPHhw06ZNT5w48d1338XGxk6YMKFdu3ZuACTUtm3bVqxY0aZNmxkzZmAA3CXtzfeqNm3aNHHixPHjxxft7UZDUlISSSCsSb2YK0sGTmZmJiqWdEeNGkX+kdFFjurIkSPE06BBA7P4aQlmMhAwZvPmzaMF9+3bh0+jjUaMGMH/ZWmoLl68uHLlys2bNxfqG20HDx6k3lq0aEG9UYoSyYnbY48ePar3B4QQQoinnaAZgNzc3LS0tJSUlDJQVKmpqWX5pc9q1apFO3z++efLly+vUqVKly5d7GI+ePAAIbVnz57IyEhkpb3QDUrrwoUL7OrQoUP37t3t+wZ37tzBDyDs7Mu6BGjWrFmtWrXu37/PgXY2jh07hgeoXLky9Wy28Bs9bZ6ouXz5sn15/vr16/b7BkWGeiZm8k+uunXrZsd548YNqqJVq1Z169Z1a6N69epNmjShQgjpyf/x48cR361bt/a940FhSYXYqIoAl50hY1SgJwlqpk6dOrgju54NbRzCnI+FXb16dcCAAViywOrg/4EGvXnzpiddNmKNGjdu7C7CU7FixXr16pEiP65du2Y+tnXq1Knk5ORDhw5RXk8x6Qk4TApFEfzWW3p6ev6vDZiaz8nJwbNRmbUdzC7TqWgjN3JiMz321q1bgd8BIM8NGzYkKlLxZJIS0WnxvbY1ZQudk6J5WorUOYXz8vICTNcvlI4TjVLfvn3bjjzVoZiRCyGEEE8XQTMA5tOnyL4yeMDj4sWLd+/eLe1UfImNjUXPoa3XrVu3YsUKdzvSCrX3hz/8oWfPnraaD3Me5hk5ciTqkAx/9tln2CR3F3odVzBw4ED7k1KI7JdffpkC7t27d8uWLZ6oZs+e3bVrV/cdABI1n+Ii8o8//tgWPWSyUJeZnwSKlhyiIJFZCxYssH0X9oNy/fnPfyb/7po2WKBZs2adOXOG1JGtdlTUzPjx481nCjypYGyomcGDBw8fPjzA59fNrRX7peQwR+n2798f2d25c+ciFDYQzAJHnnU8KdqECRM6duyIvXFzMmTIEBQwTfPtt9+aR6SQwr169aLRN2zY4GkdjqVxz58/f+TIEc8a9liaF154oVOnTvmvoGreGzl9+jSd55NPPhnuYIwZtTF37lwi5ww1X8gyPfbdd9/dtm0bmQmw7PS0cePGtWvXDkH//vvv27soWkxMDG1nrwrFFvPMFUn88ssv7nbs0IEDB/x+gThwnnQyMhDt37+/LC8QCCGEEEEnCAYAxV+pUiXU50mHMkuXRMv4gfjeDujgDz/80P7GFloKHfzWW2/5rsKONEQIxsXF/fd///f333+fmprq7kIe/eUvf5kxY4YdvrPD+vXrCc//9q4//vGPv/vd7+w3aEl32LBhxEN+vvnmG99L/uYKdCBFIxginvrMdqjgEOYYgH4OGAySQFy6hyBkyT+ltuNp57Bnzx6ytGjRInvXSy+99OKLL9oCkZ5DulWqVDni8Pjx4x49ehRoAEx/Q+ftcLB3jR079r/+678wEoEUubBQIVQR2neDg73rlVdemTNnTpcuXdwtCOIBDrTjl19+iU5lI41FjdEot27dQo7bTWNWUkKOU2/Lly+3I3/jjTeoOoyTu8WtNzuG1g6HDh0ihrVr1zZo0IDkzK6ODvhJMmOEOKaCnLz55pvUJFbTTs5v5IbGjRuPHj2aNiKeTz/91N6F2aDm2Wtv7OlANyBLdAlPbKYd3esF5k/zxQbfmje77PP9SSejwXwNw42c0QkPRsc23xkokU9kCCGEEOWHIBiARo0aPf/882W/NA0C1PdachmAzps3b96IESPcLajkhISEfL4nZVYBQoLYj1sg5Z90oRqNOG3atF69etkb+/fv7/fR/6pVq7IrNzcXAe3ZVbduXU8kTyI2Nvadd95BVa9ZswYXFx8f71mYCLGF1refF69fv/6TIm/WrNmECRM8rdOnTx/zuqqLebkCVWfuXURHRzdp0qTArFJvEydO9Pv9hE6dOpXeAjjm5gbt6LsLD4bg9nuUqVjz9A5VijvCto0ZM4Z80mc8SrRly5aTJk1CrNsbcY+ehV9r1aqFuDefaPC8VWJORhLiKM+9OFJ84YUXzFsE9BkK4rfHmi9X0HNwL34/K1azZs2hQ4d6vmOQz8lIo+COsMG+u/r27UtC5rfpM/Qo+4aYgUqbPn06/tb3FQjfk9GF6nVvx125cmXXrl3Hjx+nmfDqnC/283JCCCHE007QDEAga4+ULIF/97RkQXOgSOxnDFBa+X95F6WF3kLZ2E/psPFJ+UdLYag8gr6ag2/gKlWqoNXQoL7PPaOtA6ki8o9e7NGjx5IlS7788kvzOLvHACDfkV/2I0zme8N+IzTLgHquByO5POGNAUAFugUJJLfNmzdHJdPlfHeZj9cWGEPRwAAg0P0+W+JbNBdTsabeTI+lUTAAKHh+eyQ43mby5Mljx47NP3JjAOhRFNazy5yMKHiTkL3LGADTqUyPfZIBQE9jLQjgVyXjQjEAyGt7Yz4nIwbAswCu36IZA0Aw33g43dhLHfo2ru/J6GKfLxiAZcuWHTp06LXXXps7dy7by/gLx0IIIUSpEgQDgBCs6VD2SQeFKg6FOgS9Vd0hwPCVHUopcr8YtUSi6enp/PC9mfAk++EXlGUg6xShUGs4FCqrAUZe4hSh3cOeUG9POl+KX2/mZPRsPHv27JEjR2jcbt26FXiHpMBGKWyrBVhv+ZQ9n9MhwMjN29UPHjwwL2cXGF4IIYR4utAyoEKI/4fjx49/9913SPZXXnlF3wgTQgghnj1kAETRad68+YABAx4/fnzhwoXExMS2bdvmv/JM+ScvL+/cuXPnz583b19cunSJQrVv3z4UvkbsYtYYzcjIOHr0qOdN8bS0tLi4uO7duz+r18WvX79O6584cYIWp4zuMk1CCCHEs4QMgCg6Xbt2rVmz5uHDh3fv3r13797p06c/7QYA9uzZs2jRIvP6Muq/b9++PXr0MN8ECBE6d+48Z84c06yLFy+2d/Xu3XvatGn2p+ueMU6ePPnzzz+npqbS7r169ZIBEEII8UwiAyCKTlOH8PDw/fv33759OzMzM9g5Ki55eXkPHz684xDmvMjbrVs3zwuszzymWStUqJCcnHzr1i17V7169aiNZ8DmPYmsrCy8H2XHBfXv3z/Y2RFCCCFKBRkAUVxat249derU9PR0e2H7pxTMTN++fSMiIoyZadasWVCWji0PmFWA4uLi7I0dO3Z0F+J8JjFfWKMb2B9SEEIIIZ4xZABEcTEXjIOdi5IB5dfVIdgZCT5NHIKdi7LGfB8t2LkQQgghShcZACGEEEIIIUIIGQAhhBBCCCFCCBkAIYQQQgghQggZACGEEEIIIUIIGQAhhBBCCCFCCBkAIYQQQgghQggZACGEEEIIIUIIGQAhhBBCCCFCCBkAIYQQQgghQggZACGEEEIIIUIIGQAhhBBCCCFCCBkAIYQQQgghQggZACGEEEIIIUIIGQAhhBBCCCFCCBkAIYQQQgghQggZACGEEEIIIUIIGQAhhBBCCCFCCBkAIYQQQgghQggZACGEEEIIIUIIGQAhhBBCCCFCCBkAIYQQQgghQggZACGEEEIIIUIIGQAhhBBCCCFCCBkAIYQQQgghQgj/BuDevXuJiYllnBUhhBBCCCFESYGeR9X7bvdvAG7fvr127dpdu3aVbqaEEEIIIYQQpQPqH1Xvu92/AXj06NFVh1LOlRBCCCGEEKJM0TsAQgghhBBChBAyAEIIIYQQQoQQMgBCCCGEEEKEEDIAQgghhBBChBAyAEIIIYQQQoQQ/x9ulL17EPDjKgAAAABJRU5ErkJggg==" name="Object1" align="left" width="463" height="117" border="0"><br clear="left"><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 100%">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAEECAIAAAA51tFlAABBk0lEQVR4nO2d+ZcUxZaAm7UBEURkVTbZml3UGdSnb5Yzf/bMeeeN76iogCAIQrPJKvu+L/NZd4gXVmfW0p1V1d35fT/UKZqoyBs37r0RNzMyYvbr16+HRERERESkHswetAAiIiIiItI/TABERERERGqECYCIiIiISI34UwLw+vXrF2949epV57XMnDlz9htmzJhRtZAi7Xn58mWy3mSNs2bNGrRcU4xQY3yivdAhn4OWq5myYBXSBgMUb7AkzdCP6Y9GaekpuUvyT40tJw9WSTO4ZCpQq/GrVo2dzPxpjKQzrr3hwYMHndcyf/785W+YN29e1UKKtOfu3bthujdv3sQOly1bxuc777wzaLmmGA8fPkxBYMmSJeHUS5cuHbRczTCEXL9+PeS8f/9++vvixYtT79dzRGEehguEZu7cuZP+vnDhwhSl58yZMzgBZXqSzx8wwnDDFStWzJ07d9CiDZgIVhGvnj59mtyQiVMqU6vx6969e8lUkjYYbgYtV+1oTgB+//33X3/99cSJExhr57VgpiMjI6S2fDEBkIFAAD179iyme/r06ZEGCxYsmK4BtHeQ+f/2228nGqxbtw41Mn5P2gQgghVRK/199erVyDxjxoz33nuvzgnAqVOn0MzFixfT35lSoBn+99133zUBkMrJ5w+457Zt25gSMKszAUAPN27cOHnyJJohwOKG6GrRokVNCUB9xi8SgHPnzoWp0NKtW7cybzQB6D9/SgCeP39OQkaXfPPNN+fPn++8lpUrV2Liixcv3rBhQ9USinREBNCDBw/++OOPjx8/Jra+//77gxZq6hEJwOHDhwkCO3fuZPDGuwctVAEpAfj222/PnDmT/r558+aZM2eSsXS1iHE6wRSf2QYJwP79+48fP57+TjrHJ6Pspk2b8pmHSCXk8wcmuNgh89eNGzcOWq7BkxIAgtXt27eJXcz+myZLtRq/7t+/TwJAYzGVR48eDQ8PT+PGTmb+SACeNMDmbt26RQZ/584duuTZs2ed18Jv4wHWxYsXiQLY7rwGU2XxHw5JE0IPzB6mnPwy1DBjDBgLHB0dXb9+PXH26dOnvbscw1uyGb7Pe0PhXWcKJC9jMIiSmNkkvEWN4xMBLl++jBoZv1EpMg9aqH/y5A0IefXq1bHBahyvME0PsPbQzMOHDwnj2D9fcs0QmeupGekPmNaDBw+YBjC3w9LIM5nn5W+h1BbiP854/fr13377jUyApOjevXvxpkReBl3hpPhsvL0ztc5oSvGHL2k0LHv486oBzYzGxj/7LLAMRQLAGM94f+nSpZj9L1y4cO/evdu2beu8Frp58eLF1LN///7ly5eTzK1uMAnnN4VgtVeuXLncIJLRqSW/9B/CFgE9bIaojc2sWrWKz8J7q3EHKLyM+Lj6DW+99Vb/JZ/SMK8Nncfsf8GCBXv27NmyZUsqQBfwz/feey9/wa4O3L179/Ib+E5M3r59O5lwKkBkHhkZ4bPOr0eLTE5iAQVTkUWLFuG569ate/vttwctVBek+MM0Mg1wZWtHaSMNfPToEUkCU02+85c+CyxDKQEYHR09evTohQsXGDiXLVuGIXY1NcFqmQwxxTlx4gQ/37Vr15w5c1auXDlVJtDMyTDcY8eO/fzzz3jdlJNf+k9agoLjYP87d+6MdedlCQCFT548iYHdv38fA+OPBEcTgG4hAThz5gxqPHv2LKEGhTN4LFy4MBV45513VqxYwX/VMAFAJ1hjBGE0s2PHjnxYJbIR01COCYDIZCMSgAULFqxduxYnxVXzsDb5SfGHMZEB7vnz5wSfFgnA+vXrGStJEiIomQAMhH8mAN9///3p06c///xzrHDv3r1YYee1kPN9++23dPz+/fsZeIaHh+nRKfRMJ54AYLtff/31u+++O+Xkl/6Tr0F/+PAh000sP78VnZPWgH733Xe4G6kCZrZ58+Y+yzwNIAEgTP3www/Hjx8nWDH737NnT76altkt2fvcuXPrlgDcu3cv1hBjY2iGkXX79u0jIyOpwKxZs1DLnAYDlFNExhLvBL///vtMncNPp9bL0yn+MAl88eLF22+/nT9+bILGzps3j8Y+e/ZsKjZ22vBHAkAfMINhZGVq8vTpU0ZQktFly5Z1Xgu/oguph0oYZh48eMD3KbSCjfkZOcD9+/dv3rzJ5GzKyS/9B/PA7DEVvIZPjAcTKksaKYxFUQwHwcZaF5YWMDoSrO7cuYMa0SHRhrGkq2A1XUEzjx49QjOkmo8fPyb/YQxWMyJTgsjMFyxYMGhBxkmKP9evX7979y7fm15yyKn5OS2TB/tARERERKRGmACIiIiIiNQIEwARERERkRpRTQIwPDy8cuXKkZGRhw8fLl68eOPGjUuXLs1fwnv16tXt27fv3LnD5/Pnz5csWfLOO+/wyQ/H1vb69etU+OnTp6lw2RnDqfD9+/cLCyxcuDBVkrb2f/nyZfrh+fPnf/31199//z1eh7h48eLRo0eRbdmyZfFDGlVY86NHj1IlhRsez5kzp3P5Hz9+nMuZaywVfqcBBfK35tFSKpzv/I3YreXvCsRLV5k/f34StVD/cbBfFGj70mGZ/AlsKdVWyc45iJquWFigTP47DfgV1nLs2LFLly5hA8h/9erVEydOINuaNWvSD7lKFL5+/ToWhV3F1uxxXiZmuW7dulS4cMspuj7J+eTJk0JRUw292zYu91+akP6+YMGC1vLn5PZTuDx09uzZqbZ8M6V4dyJ+ePjwYbz13r17uNuNGzdGR0exbf4r/TB/mezu3bvxK74UitRW/lz/uGQqnLelUP90VqH/Jrhc+uG4F/7m8efnn38+d+4c34mft27dOnPmzIEDByhQGH/Gbf+JPH7yPRXONYZCxsafeFUshfexNed67mQjlLbxJw8vSNI6fuYRO/kvXwrjT+/if9lJbSn+4IaF9hOv8zXpny+9899UQ+ufj4Pkv7n+UWkSI3eiJH8+fyB0FNacNNOJ2Hn8KXwzkKlCYfzpCmJaXIVWF9p/2/hZRuH8J2fc428l8aft+DVx/ZfNP5uCWBTuNv5MaSpLAFatWrVjxw7CFjHlww8/bNqHO3ZBOdMAm/iwASXLEoCbN29GYbwiCsfhXIVXD2uDy5cvFxYgOYlK6NQ8AWBadiaDOVwkABcuXGAugo3yE5IZPlskAMzq4ueFnhPa6FB+vkRhSqI9mpM0lgqvX7+eAvHuY/ojDnzlypUonIe8tWvXtpa/KwhAzHfjKu+++26IipMU6h9VRwFcqJMEoFD+BN0RteHeVSUAzCPjioUFyuQnWJw+fTrZDL0fB1EhP/kAKvrwDeg8dkZL5bGrSACwtF9++SX2norC9GbZBJRsIX7OpQtFjRpQUU8TgOS/165dS3/HzVvLn5PbT2Eyg9kn+29KAH777bekc4aZSABiF6Y4fzR+iG00JQChf35eKFJb+XP945JRGD3n9lOofxpY6L8J5IwfEgMnkgCk+JOMJOLnqVOnIkcqjD/jtv9EHj8x6aR/RMLO4++rV68eG3/C/lN4H1tz0jPX7WQAbht/cvshJLaOnyli5/5LzYXxp3fxv0UCEPEk2XyT/cT41aR/ZO6d/yb7r/wF1kL9c5VkP8mJcvnz+QMlC2tGM2n8aitGbj+FOzdw9cL40xX4ApGNS3CtQvtvGz/LKJz/5Ix7/K0k/rQdvyau/7L5Jz471n+7jT9TmmoSALqWBACFfvDBB3Rk3PIZmwCcPHnyxx9/xETSSdeFm78mA6Iw0SpOi8Bjqbbw6sTN2BnwxIkThQU2b96MLSISnZr+mCYQXAXB7jbAExAVawtvTDs2lm2KGtH2yJEjXL3wwFQu2rn8cYc4sinCGVHv6NGj/D2/f7l3797Ybx5Vpz/GVJIJKIWpLf199+7dreXvChpCACLR5ypcPZ30Xqh/moAycchOLl0mfwKvJmRgWitWrFi+fPnE2xL9G+euFxYokz/2oUdOOj1uUNFl2BLyRzTEYl+8eBEnvfO/FOYSP/30UxQmljGnZFiKaM7kkn+22DEtJqDHjx+nEi5RWObTTz/F15YtW4aNTUwrpeT+m08Z161b11r+nNx+CocZom2yf4w2/T1Gi0OHDnF1zCNcNfw3HqdQLSYU8ScP2Un/dFahSG3lz/WPS3K5eG6T20+h/unfQv9NEABRQpw3gju31V4hefzB8EIzET/joDr+tzD+jNv+E3n85BJJ/zFaHz58GJFGRkbGxp94XEYCTAFqGFszeqYVfOLpKKetEtrGn9x+IiS2iJ9oaaz/UnNh/Old/M/tPyfFn5irjbWfQv1Tpnf+m+y/8gSgUP8YRrIfrjhW/nz+wGdhzWgmjV9txcjtp/A5D20vjD9dEdnOgQMHYmQZa/9t42cZhfOfnHGPv5XEn7bj18T1Xzb/5MtY/+02/kxp/kgAaCpxJO468B1lEToL71pFYXorPtMfsY/lDcouE49g6HJmQvQEpkBcLrxlMtRwYDqJLieKERMx3DVr1jQ9LKZCTCE+qZCQR4yg8sIKsUVkI0ZEeA35+SHdjEcxujOMpdoAwXADymBMXLrJ2eLI7iiMnAzzo6Oj2FD+aDXxbgNMDYun1bMaIECeiCMGjaUGohUjFqISlVApPsnAgMPnPkmBSOjzDqLyuCnChCO/wRNLsxjJKJwuPe790fExroKuvv/+e3S+ZMkSlEPNhfonBCxdupQCeC9iJLPJKwxto8ky+fOGoD3GxXhQnmorvJ9RRnRcXBGVYloovMxmyuTHGOgXfkh/JSOMh54YQzSQQEaL+DuFaVeYR7p0PKGOEMNfaFQE6CbNROVcnQloHLBCqCoUFQehl7GZ2PwxOrorzZSBDIyv9HucY4+VHm+QCvB3gi++TEu5YrKxXOfJreKoSLSBSRfOiWPFGtrjf1F+qo12xc1mAkKk6KEfikV38MnIhAbSqfJxRToRpWGxZb3cVn6aj3njhgzMcdsY8eiU3H6QmRpwhLyxGECh/yZwZH5I72M2uPz4TBptIB7mgYEhVTIwvtM0LIdLUzkRIPY1nrj9pwLUQyVcmoGZMkzCaMuWLVviqGZqprOYMaT4mS5N4XB2JhyFz2xjH2pq27RpU5lJt43/ufx8x3TxoG+//ZZ6YrVqfkWUQ9iJKSPhmlATmUyyH9RLbfQyvtC7+E89GBiXbnF/l8I0FqOiOeg8JjF5AewQw8NJv/vuO9oVYqOH3vlvij98wSDxwap20EZp6J+W0i9MTshzuAriJfthgE7xM5lEOAVaoqX8tqxyIkYcRls4pcmdBZNmnhAmXbj2Jo68peMwNvw6WWxXjeW3uCSNwkqphDqbLCraxSSqLH7mnTXUmKpFo/hjRK2mfpn4+NtV/MkrxN5QKVncN998w8Sdmrdt29bUlgr1n88/cQTMBovFbOj9sf7bSfyZNvyRABChaCrtX9mAviGmM3QV/uC9BrE4vr+i/glMNs4e5pMupM+I6WU30mgg82kiwt/+9rc4I5NPAgqfW7duJdryJdVGyWUNKLZz5854cJbXhimnwrgNNoStfPXVV4WmSVpFVbgrEwjcO1298Kk6NeAzjGT4G8GdX1Hyiy++yMcDroU1k8vmC0Ji3Sc+sG/fvnw8IMbxiX0jZFwXKlkokjJ4XLRQ//gYXoSK8PA4mTUESF5EY0OHQKsL5U/gfjg5eiBCMSpHVWXH7paBElLHMUYiAAPAf/3XfxUWLpMfs2cQwkcIW6k2lJBE2tIglsDFOgR0RYemxmI/qTZiEBbIl3xT5LiDEuXRDJ9I8sknn1CyUFQ0Q1swmzCYqLmShVJxBy5WvNDLGDMewZwjFUAw9IAyv/7662VvyE9/ZAKdOwt6I8L85S9/KUz+cb0Uf6gztQUBmKPEsy/Gp6gNkZJJ04/bt2/nt9QQuUpcNOaXBLcym28rf0484WH0jZwk2c+ePXvWr1/P1C1ueqWOK/TfBD2OL1MnYw+NSo0tXBVZBsIzt9u9ezc2Qyvi6jH3jdr4X7oMC8FTKrH/wlEwHaRIo5CEf2Ik//7v/44jRPyMO3BxdTSDhPjRv/zLvxROmrlEnBDE/IAJRIrG+Q3mtvE/lz8ydi7aycQUkRgpIpeIzA37YQT56KOPMELcqnfxv3L6478p/pBg4B2xKrIrM25LuoOLtEiY7IfPFD9RchKV+SKhIGJCYYX0Aj9B4P/+7/9OnZIP9Dh4itixNpje/4//+I9CE4pkHqn279+Ps6S4VO1ZhHGHe9euXWij0HHyzkLOJAYqYqChW3PnrWT87Sr+dNXY3uk/LcHFB7GBsf7bSfyZNvwzAcBj6S30TrAg/BW+uDbUiIaEdbxr4AlAvLlLUIgXDxgAyoIOfRkrUymf5GeEIDfFN/gtRkM9/C/VxlNjyvBfce+kKQGIR9hxafww8lcmhYVDI77KpSPDph7qpOay9+owQaYCRFKqDYOLyU1ux48bcGlCbfojdowS6EcCRJ744rEUJgGgzrg0xapKANB/3H4r1D9tiQkHxdAPV48n7/k7GDQ21I6bFcqfwO1pCBUSgBjLoy00pNsEgIEhOo5+4bfM25puPLSVPxIAug/jiariJWBiXNgMdWI2lKQh9PiGDRvonVSYVkSmHU1geoSBxQ3gvLHxCJufEFXRLZNLflJ2ckpohi6m/pDhrQada6aMmEAQChAjeploni+yjMNf4lY3hsrVEbJpAsHoEr1MYKESfA0VFYZmOiXFHzo3VIQOY9UNP6Hmkw3Co9FbtBc1onNUhAXGLdK4YqxLxuURu7CBbeXPCfvBDFBLHNsZ9sOlsdtIAJJJU6bQfxP08qMGhw8fxkOjIVTS1cwpXjofasTw0EzcmKcJkVvSdgownjH5q8T+y9YQM7/EhgkL8QIrCkEArhvxMwJFSIiK4t1TXKbMpLk0lnDs2DHKhxlgA00JQOv4n8uPBRL8O0wAYglNPNOLi6LDeBQMfOld/K+c/vhvij80E9XFvgjVJgDJfhjR8PpkP3xP8TOW0FAGb6IAou7YsaNsRT6diNjnzp07fvx4uF7c5E4FuBANiYajhJjplt2CwdioLZ6qRVCKlVeVJwA4VKxcKnx7PiYGCByrUimchiSEb0oAKhl/u4o/XTW2d/oP/42XPOMF+rH+2zb+TBv+PwGIdYf42M8Njhw5Uvb2DG4W6w77K2czdB7ee+jQoW+//ZYElLSYAaBsPR8laRGWFM/OQn6G7Vi2iNFjoBhE3NWmp/mvjz766LPPPot33pvmUvHGJ9khl+ZXXJr5BzIUmjhyculQKT7Wet1hTCBiXR0iUSeS8JlP2TFKasMu89WN+Bti0BAK51GMoExhAiKREYOOw7e7UXMpoX/GVyQp1D//RZMZD/jkojF7ywfgtIYYNaL5QvkThIBQI8TN1w7Xrebww7iDyxUJE1yRMY8rFhYukz/2GWAUjNfvIrEcajyZYbz5/PPPKYwJxYNI2oKxxeoUej+CGm2h8Pbt2ykc9xShMAHYv38/5UO9fJad6hqaoa8xnlj3HEF54jCBiBkAwoQYkFcea1KZZMRt7Fg3mdeQbrd899139DiVkBFRSWF+guWn+BPro2IpNn1NT8XTFb7HSxRx15zojBr5e6iRrokJHCkEV+S3XJFBqGnJR+fy54T9xCJsrpjs5603pAQeA6Nwof8mMIZk0i8a0NhuTTrCVySlixcvDp9iJIsBeN++fdhkWCPmR29O3P4LC8dLhBE/Q+dcnU9ECs0wD45YQafwJdlSYa5FK0ItmA3hGhMa+ypC2/ify8/3hw06TwBwQMIm2VHYD19CjcClexT/K6c//pviT2REENsZVdiQsJ9YsEE4TW0hB0jxM62hP3jwYPwvMbbMoWJtXqy8Su9d5AXiHS3K0HDMmCsSaqizcH6MtcSjD2qLKB03VSvUwFDjraFwduytcCl8rNaL+UMkAAjMNIamhZaaEoCJj7+xWK7D+NNVY3un/5i/xR0EmjDWfzuJP9OGPxKANMel2yIpZHAq23KENCseyuTTEXpl+A2FWRc2gX7pyHiITDHUSr7BgJ1+iJExkMS9PYw45k+YWmRpTR0fT4joQjqJKEDhmFQVykzYJabHrTviO1ehj/nJ2w2GGkvcqArxCOh8x3qIkgT9wpiOSLEakqiKcWOXyBk54tjCsUIOaamfyjG42MCkTM64JUMB+gJJCMc4Uv5CGB1EsXgxMakO74qVSxh9HsHjETY/oXDcDyi8czAOUEIsh0VgPpm74CG5/hme0Q8hiVDLRfExNJ8PwPHbuONLkwvlT3AtghrlCQqolGvF2NaVzLH/IGEiXvkgNjGnLLOZMvkXNIjHglSFs4TpYgOh4Tw3ToX5Y9zPoHAsMcRo6dn8TcRcM1wrNp/hEoy49C9ztbLBDFNkgCSoMWXBbsu2chsHqZdnNKCNiJFPpnGiuNtN0+hBhoGmZ9NpNTzKpOHoB1Oh4YXDTLz5wxXx1ligEs4yr0FMFlELzUQh4b+x+JgKUyV0FmaPtWDzEdawqLJebit/DkoOxcZ8HX+nx/OaqScai4QUQCokpM7CpYkx0aRCROU7jSWqdLW731AjcEW8GnqzPwz2Rk8hW+So+T2zSuy/hWa4LvLzJW6q5bfk6dMwaWqLjUEog2EX2j+V4Cx8YthIi0mPdfa28R+tUgkmR4fSCpoQkaqtStFMBMl4n4QeRMj8OUm8wNOL+F85/fFfpl+0MYbFGMELt2qppC3UHNtSYboMFvmsPZlEDHZIi2GUmTcjzrFjxygf9hOrvfMCYdIUo1ERxmOdeuEzK6wUw8bCY2MrDLuFs4ybuQ1aZFb0I2Yft6hQVwxJ2Gdh/Klk/O0q/nQFlVNhPLHEAelHrlKJ/lOwCk9nKIkH8imn7ST+TBv+pM1Yq0CAQDVl+RPmFWvQiebpj+gO90CPfBamegSauIEXCyjpS8LoDz/8wOVWvQFPI9CQWvDJEB5r+PgtAxV23G0GmRN3EGPPBGTAPirZFrNyQv+hRpwHc8eLyh4WkxHhsaE6xhV0xZdqH7y2gGEgdRwdFGugu6oh5MfxIrL3WX7phHjxC3BAepm4P+23RWsBISjZfDzdLtuqpW7EDdQg1lg2bQPdf2KXj507dzLSk2hdeUPbH8Z7pQEReOw7YFOI/vhv3G1lLsWo2rmeuyLmDzHHYKyhLb0eLHL7oYFj19BPdWo7/kawilkWdhvvkHT7xva0oSABYH5P4CjcoXmocf8DTp06lb+HTlaATw41niG0SADilli8Gx57n+Fa/DBsMZ4gk5eT88XmCXGPKnqr2zVkObGqJ14xjBl2t7PV/hD6Z9Sh4Qw80fCyVYxRGPOlcNwLaVG4cmK5AlEjYjF0q9KQP5Z5EIP6LL90QrzETC9jk9HLdU4AYr1N2PyaNWta7NVYN2Kbv9AMYSE2phxsAhAixbhz8uRJhpVYDNP2hzFYRFuYAtLLUzoB6IP/4gUbN27EO+h39Byrcaq9RJo/MCOPwQ4mMiVoS24/cft/4CZdLbUdf2MeuKMBwYqGo4eyl5GmPQUJQLy5WPYw+sCBAz/88EPTS6goMRLlsucG4Uixbuzq1avff/997HyM8XFRZv+xy1is4eN///Vf/5VOInLFc+Rg3I3kutHrVBjP0SZnppuewHzxxReE1Gh16ycAsQY63mGaoJa6IhKAjz/++KuvvhrfpUP+qOf169d9ll86ISYQn3766b59++yguCm4e/dubD5W6NVZGznpIMi//vWvTJsiwE6GJwAxa1yyZEmcF9HJHdz0Dhi9zMAxpXu5P/7LuB/vHTFmxey/7HS5cZNWEHz22WcxiPe6X3L7SSucp98TgBqOvxGssKIvv/wSo41W+wTgD3Cz+Q1a/ODSpUt4RWyWnP4YZ6pdv359dHT0/v376X2p5DDxDkCk7Mz10zsAT548IV7EOkX+Ens2X7lyJb0DUPa2cewKHNv/8SXWQP/yyy+FhbluyIPY1fpwWnB84sSJwpfEYwvbWEPWNssM/S9evJg0IHbwbEF6raKTwpUTh+QxDRr34VO5SaAcehxN8lmYeaJnlEyBqt5hyNcQFxag1+JVob4t2C0kX4NbdjQHraAthdu3TRAGWuZA8RRu4rXla9AL34uNnbDjHYZJeLMN/4395ghKbe8K52tYC7fWjtfHKzTpAcLwGRuzxIahrQvn71AVPmfG5uM13K6OOy0UKWLy1atXO99eKXqZkaLX95j7QLX+W0aaODIoxLYZ6LDbt1lak79D2Hawy9+hKrulffbs2dhvo6yS3H7iIJQ487FwZTnXwp7H8Q5PJTx8A6MADoWiyGCRPx7Ll01tBzv+DpCYZRHAqzpUdErT9YOPeOObGJ0H+tiGMvZhRaexL14cK1aptP8kHibEnidcKPYhxqsLC8d+tBBvqFQoRmwNfuTIESQpjDV4FDMA5gFx+FyFl55OxC4iFxoUBmX6FzUyLejqBMQWxC4iw409EwoLEOy4YuxAXMkVx0fahQOPK1twcvLkSdpCi/osW7ekXZji1avCArSFMnypZBvTAZJ2sYhNJMYW4O8YWGya3p9NIScJaRe1eE9xbIFXr16hGdLayW/SMglJu6gx1cO/Cssw0IyOjhae0DcW7PDCGwrfb463qLHqgQwWcQsSEICws3Dhwr1798Y2yh2u6un/+CuThHEmAGSW+V5mGM3lBgx4cSxz7DjZuwQAAdatWxdPHuPSJABkwIWFN2zYkE6KrlaM2HILr4vDaMYWiAcjMJG7WdOe2Ef82LFjP/30U+H2U7EPNGokAFUyNYxdwKL7CgukU5MG+/p/LFyO5pftQxxylr20M3mIfehjsCmc8qaDbCg51ROA2PI1Vp4UjsHp1DCMcOquMh8HsQ93bJlamAemU8Ni24b+SyhTmpQAMJSU7fbBf2FgHSYA2GFsGMrwVJgAxFHlGO1AbpDTCpKZw4cPM0Fn0rV69eqY+sfxVZ14UP/HX5kkjCcBiHVjuSdgPf/7v//L7H///v3x0gxW2Iu9wBLIEJuzYpp///vfxx4Fn7N79+6Y/Ve+M1c8x6f5Tae7J5pO55ZC0kmiX3/9ddmLeulg8KoSgDjysyxHzY8in/jlxk3seR97qJc9vAoh43WuPovXFfG4jI6ug7PETQGMuW1jY9OFvgs4MOKhVuw639akfc1auiUSgDivo2wlYXK9Tiq8f/8+I8WhQ4f+9re/Fa6QicEi6pyQ6OMiEoB4r/Kvf/3rli1b9u7d++GHH85q0Mlayv6PvzJJ+CMBuHv3LmlfrMVf3IABqWz548wGTWklhfkj9vGkASG+154QYsR3Ug4ygbKzfoYaZ5UPNTaL/e6770hgoo2VHIg7PDwc6uKz7eMOMhDccunSpbV95TwnXvsO22NCQBQjSSN4FS5XJe4kK63k6lwrmXrbwps3b163bh0l+/8SWBwaEHK2XcQcu5JPcMus3jHcOGszmtPWBeJ0xg7vYE1C5s6dmxrbtgmxAzefU7SxXUHXJ820NWnKEBNWrFhRh9cTpRKI0gzuETM7ma1u3749Tm/M//j06dMYbuD8+fOPHj0iF929e3dhzkDhNJZV1YrWPHjwIF2R5ASpmOTEqdV8oe1t1xsPdvyVScIfwzB9f/bsWdJlvjBD3bBhA6PX5JxDFBLbkOH2LVb4xG7QFy5cWL9+/YYGlSQAsQaJ2tBb28V2yEmxOu85lROnBobh3bhx4/Xr16RGZTf8Xrx4QbGzDSq5ejzFio5rW5gpdWRu/U8A4iDhkLNtroLPUozBbHIeWh5H2Udb2oaX2MCkxTkYkxwGYEbiaGzb7sAaKYaZ1WGaSxtpaWim7TMrVEcxNOkLVNIhcRJtGFjZJiI5FBt7jk08wYvhidk/w9PatWvLTli/d+9eDE+92Imh7Irnzp0L8ZCNGcXIyEhX8X+w469MEv4/ARgdHT1w4MClS5cePnwYO2YOWrAuwGrjpPqyl8ZIcE+fPn2mAUl8BIhKLh0ri6jzk08+aTtEUWDJkiXMbEwAhrKjyDG8O3fukMJ92KBwp+pnz56RsMW64UqCbJwNt3fvXjqubWFEio4bVAKwbds25GzrldhVyDk5Z0uxs96uXbtoS9v9yBnMoi1TNAGIfcR37txJY9seO8icOBpbn324t2/fjmbabhkUG8u0eCIt0kSM75s3b8bAyvYlzwkDa7oh+OTJExKAo0ePMjwRuNLwVLiihoEM+4z3/itrRkuY6pw/f/7QoUOIF4IhISlK5/F/sOOvTBL+mInevn2bxO7gwYOkAXHaZdkB2lWBF82aNYv5SiwDffXq1fPnz2PVUKwv4r/K1s4GrxvwQz7jeR9JfFn5n376KU6G//rrrykfm/tW0pC4qbljx44vv/yybE4TQsbrB3Ek+yTc4rBbQvlEBDouWhRN67yGeK8Ik/vhhx8ePHhAyCZ4NU1zUy8TdB49enTlypXjx49XlQAQLsnc/u3f/q2wwOs3cPXUawNJAJYvX75ly5Z9+/Zh4YVlkiPAODqib8RNcWLLX/7yl7KnGdPGWZgQxFGyX3zxBQGnsMy0aWxXkACQ027duvWzzz4re2Y7cZPO/ZcwRbSp/AUwmZzEkUTMZRlNPvroo8Iy+fyhMLbHsniGm2+++QYrXbNmDQP9V199ld+8SyZ68eLFu3fv/vbbb31L4OO1hCNHjvz9739njGCAYErz6aefdl7DYMdfmSQM4FZ0PAJmHhCvCjCHxrCYmt+8eRNTiyfm+O26detarNK5d+/ezQYYMePr0gZt77T1H9qY5IzHFMEUva+ZiEeQhw4dioSqR/q/c+dOqO7atWtkcf3chowBgOtG3zGZiwbS0kk4t75161ZoiRid5Jycq4BaQzJ58w2EgmRX0/K+eAzA0VhmqKmxdVgF1BpCStIMbphMuqvnWrn/njhx4tSpU7HOoXdiyxRi4vOH3H8ZCn/55ZerV69Og23ycwY4/kp/GEACwHC+atUqBvuFCxfevn07tgXEhcitGfzi6HJm/2vXrm2xTiAmoKcabG7AlHoSJgCxjSNCnjx5kgQgMvVO3guc5IT+maURIHqnfwLQmTNnopfPnz9PAHr48GF/FlDFGtC4NO2KR0YDeQ2gLbGEDwMjUoeBpSNsphbxiDmcBdOKtixatGhaJgCxDWgYGDEwnCiOnh20aAMmbeMId+/eDc3EeS+dV5L779mzZ4ke1GkCIMHE5w+5/54+fRoDG9Q5AL1jgOOv9IeBPQFgcr9mzRpM6tixY7ginx988MGOHTtIALZt28b/Mha2SADiIKeDBw/u37+f73jv5HxvIbZx/OWXX5Bz1qxZTGuY0GzYsGHQck2U0D8zTkJD7/QfAejHH388cODAgzf0Z8/E2Mf96NGj33333YoVK+Kx8uScQDCziW3gLly4gNjMkyo/76I/MKaSLZ84cQKdv3z5kn/GeX+DlqsnpDW4NJbZKoEi3kupZHOCKU0kAJg0MRN7IDsimy17/7KM3H+ZmRE3CFOT03+l/0x8/pD7bwyC2Nj0ewIwqPFX+sMfCcDcuXPjiHumOMzO46h2jLvzWjAUBjDqWdKAiTvfy+6VxquKMNRY8U+gv337NlNkvm/fvp3J1u7du9tekVQbW2ScuHz5MjNsxolr166VvVKGczLzZmL03nvvYb4MJy1uwNN8xmM0wOw2GjKnQSqAnPPmzWOcjuf1TOsZbJCkcG0cTUMwxGMQoioUReHBbi1fCaF/4h26LdR/MgmMKs6Hb7qPi3mgPTRMAUwCDVMn6sp3U02qA2qjwETOWqdmbIAEDDPguggQp30VFs4vTY9jDzS2bAJBh9KtqAIzoFG0Jcym0AXywphilGzyl+SSSMh32h4n15SJShcgJ58okJ9UdSI916W2Fpe+d+8eA2EskYpN95o8C9WhEJyFXqaBdDRqvHXrVuHxaugktQVVo3N8qltniVPJFy9eTC/HJoAPHz4ct/xdkZs0thomTWMLzQbFYmDR2NhzcByN7Yqu7L+t/3YF1+Ln8TI9Ck8mXfi4gwLJDPgSJt20rzS9HDv5EnP4goYJR3lbcv/l73QEV6wkAeg2/oclxBveaICfNIWFrsZflIY2+nY6YVf+i9g4FHoYyHb4KBlLQM+xWgxXIp60Du/YGPMH+g7jabp5T7fSyzgLvUzz0QPtYkqQhqfcf/kSBtZT/0WrcZUYKAlrITOffOcvZY2l19Iok/7Y0/E3iYRu02jY1bGwbfWf09X8U3L+SACwgE2bNhHFVq1ahfPgDIcOHTp58mTntfBbOpuu2rdvHxF5y5Yt1NPTF9piG0dEpae5FnZ54sQJzLSwMFEJi1y7di1xYWRkZMOGDS22n4vzoQ4fPoy/rV69euXKleQk+dQ27WKBt1MtsTveYSg0TQpgtVzu448/5pOrL1++fKqv/xlq6D80w2eh/nFX1I7ePv/8c+xq8+bNTetnUBf/u3XrVlyXEQW/JVjs378/nxPESY0YJyN9pBl8jlvmeGN7165diBEvmsdhwIWF28qfkw5SocC6detCLXyWmUQ8FMJBsOGkxvRoNe1iEavjUC+SHDx48Pjx44VXx8BiG7iNGzfu3Lmzwm1A4w4QXlO2vxYOiALRz1dffYVbIUAk9om4tbZt2za8iSGT0Ewn/uMf/yg7CTiy7r1799IEfsVvu3WWOB9wz549KD/upo+OjpYd+dlW/q6IN7bpCNyBLsNHGJK//fbbwqlz3EFEWkSlAPGExvZ0sVPv7L8tmDpmzLiASdNqqmK8+OGHHwr39mGaTpnQCTYQJt1Usm38z+WPuDHB6JGoPP53Nf4SBM6ePdu3Y7+78l8KEAMvXbrEl/5vRBaP1rFn7Jx+R/PE2IsXLxYWJlfBZojVdB8GNnYbUOwNq+O/ht6kr8wKMKrkArn/0nEVGlgZkXLEVbD2FNZiCSgCY2mFPySmpVEmyd+78Tct4aMq3DxduqsTxNrqP6f/889pwz8TADyWgTPOesBt0GnntdA9mAgdEPvc03N0Qx8SgNhQIs6zIDKWDWZxY2DNmjXY0+oGLVb7EX8xtVjhh3sQ6LHjPAGIJUxYOXXiclw63o4vzP7TqTfolkrQDAJPg1V0of9tDQr1H0ek0WSmDjQZnZclAMzSrl27Rg1EDaab+b0l/gvtYZx03PEG9M64by/F2piYixDaMPVz586R6RUWbit/ThylPtS44Ud5dBKtK5wTUJgwSlUIgOVgYIhE4bEJABGTmBsuiU2WPV+OM5W4KI4c5l3V6BsJAGG3bByNe+2x3Q1OwaXHJgBojy6jGA5FQ2jRr7/+WtiJqCuchW5CIdQ2jnMAmKPgayiTGkJ1jI5lCUxb+buCi0ZjY+of93EZCAtvm9Hp0djdu3djkESGXp8D0Dv7b0tYOAMzJh3Ojqdw9cI101wlTHrHjh1lJt02/ufy42XMBWOB2fjkz6k8/nc1/nItQk3fzmPqyn8jDAIRo/8JABKSANA7uHOYxLFjx5g0FxbGDukXTIjpO52CgTUlALFl2VCjd8JZLly4QHqTHiLl/ktnYQDYLVbduwZGHOZCGHPsapgnAPxv2Sb9zHwYZSI6jU0AKh9/UwKAPzLScemwn64SgLb6z+n//HPa8P8JQNwcQtE//vgjhnXo0KGudrRF3Z9++ina5xMjo/PibOCeif3HAJC2SD/QgJyYwFRYGAtGMMLrJ598ghXOa1BWMyaOqcXyPr7Hdn55gXiJmYkC7Y0Vclyaz8JHwNgll8YDuTSjb2hmeiQAsY/+l19+Wah/xkgaHprHPELnuUnEFC3WPTNmoMBQZn6zdteuXVEJUwfUHrnZuAe/MPKYWxPLuBZTECQvLNxW/px4AkD0P336NLEvYmvZ42AmPVGY9hJ5KRy3MNPkL3aLijPmsEPkxCCRs+zuyycNRkZG8IWQs8IEIAb1sokpPoV+uDSfsVl7k2fFFC3G5vPnz9OWkydP8lm4mwRzd+qhj7ArrCJq6/ameLxcFGPbkSNH0Buj488//zw++bsCk2b4CddgqKaZXJrPQoulj7gokYQpSJyMNo7GdkXv7L8tkXVE1zCDjEvzWbhoAY8Ik2bqQCfOe0Nepm38z+VnLGNag69VMiRVHv+7Gn+fvKE/j5G78t9Y3AioouxIqd4RB0vTNbhzmAQTZRywsDB2Rb+QANAvhTEz7kCHs2BXNJmhhzrT9Df331hwEvG/dw0kmcEqCGX/+Mc/yDxRcmSJmE38V1n0wI/i4SQdlFygd+NvbA3C7J9hCzePGyLdvvfYVv85/Z9/Thv+iEThALEElj6LVfJdDUVxIw0Li1t3PZP2n8xtEDfyMX3CTYtVqrHCEsvA1gtvyuIMsaal6YTgOKmgyZL4y1sNhhr3PAiLsXdHoWnGOjZ0gmYw6ELx0DajI4ME2S0BpfUeQagar6Aw/k/h1ocHURjNcGlmcuTTFZ40FMoPlRbqP0yCAohaeFeViJk2q0HDuDflm+ZAsUKRZsZVrjaIp4potWkc5bfR2DgOnYs2TVsp/3aDocYj4FhcWKaQtvIjM+LRs8iWd/3sBk02Q2PRD4WZceY38mNl5NhdqOc3iEbhknG0e5mosRyZJnf7omQhXAU7oTbU2Padtni2RnfQrsJ1RzQtOQtJDs5Cx9Gowlu/yVneb1B4xbb2H2/sxP085peYRCwJHZ/8sY6IyMZcIeb31FY2tPD3fP+l1NjCqWEsrW7d2K4YoP0z/6AktZUt88W8w6Spit4JZy8z6dA5IZFWlL3O3jb+5/IzI+G6LbLiPP5TkkZRW9njjsrjf1fjL38P26ZMof3n/stF0UyLhkdh6tm4cSOKwiSaCnflv9GW+EJjcZYWJtEJXY1fww3odDqC9Lv1iyv8FzXT41hvYQFMYmGDoca7SVhjOEvq5dx/6Ys0PBXaTx7/+dX4xq84ryAW9CfZOiFGmabDNHo3/uaHLFFb4ZlOcc4jqqMwn3xvyvDb6j+n7fyzE/03aYYrUjjW+8XthnIFT2H+pIK0hpXvXR2VhWfyKwxlIHvYYXbEr+fPn5e9yB9G2WIT97hzsGPHDvwkX14Zx+O1eO09TgLes2cPNRTOljA7NDN2DWuh/Aw/FKbCFmu4cZUoTJ1tCyM58hOsMX0Kt95ZddwU6p8/btu2rcMlHG31n9YQM5Y/ePCg0NjiNhW9wBcKtN5QJbaXiQ1GyhrVWv70CJW0DSHT34ndY9cg5vLnQ06ciFS2WGjozSP47du3Y7plC9lpLG2paveYWELDlC7eR2xduK38OeEsu3btolGFc+J4RacX9l+2sKcr/VOm83d40hpWhpnCpYmot638XTFA+6eezuN/OHusfGNiN7YAf28rf5OoFcYf7L/zNcSVxP9EV+Nvmf3k/osOOx+/CFyt34Fp6785Xem/jPGNX7hqnPXJZLEs6aIqGtvhY4q4TR7rmtJz3Vz/be2nkvGrK/3nTHz+05X8udhl9p/Hn7bjV6H+c9rOPzuRP5HbD9lO5/47FflTApBWieEYXZ34QMcsbzCQHbtjDSVZWlnQxD6QrcUaVnqX8BcPxfLFl9gBP2wRQGOdRqwKLZwt8V+hmRa3YZL8TBQoiQwtCscEiCiDo0bNLZbWRQClMD+Jwj1KAMbqH6miLZ2YRFv9hwPHuluiRrSlyScjAHFdoklcukVjYw1xPHkvLNBW/pgAIRI9ki8xj1sRhQNAyJ8/Qo27yy0moPEIPhYFlb3iEtpo8V57V8QEInqk7XLPtvLnYNVoO+6pFN5B5L96ZP9le4l2pX+iR1yxkyV80djIHwqnhvE8obX8XTFA+yf0dR7/wwDCIwrnMfxXW/lzqo0/EbE7TAAqif+JrsbfMvvJ/Zeu6Xz8QoFcvUUC0NZ/m2ruXP9ljG/8Su9Q4REkqIVlQjMdJgCh0mh+moDm+ud7a/upZPzqSv85E5//dCU/ukp/LLP/PP60Hb8K9Z/Tdv7ZifyJ3H4IUJ3771SkOQEIryCedrWhVTyZCqqWsD0IHPZUNl9hrArZWmfA6YZW+nv8qsXkJgIovyX6F76eEluntdZMkh+dty1M5GLWgj90UhgLDudBM9GQXnRQof67Mom2+o/ZRqy7LWt4vGZEd9AXbS+NwHFDpewmd1v5k0gMTrmzJGPLzSaXv1BLLe5Axz5LxKMyl6zW9UKHjAdlJp3TVv6cUHhMlcbtLOOz/7a93In+h7pRdYyphNOJNLYrBmj/Q91oJnf2Sky62vjTlUlXEv8Ts7sZf8tqzv03YlGH41dqeFnhtv6bU8mUYHzjV0zgYj7adkrQiRgEnJh95s7SpP/W9lPJ+NWV/gsbO+75T7fyl2kpkceftnZSqP+czoNVC/lzmZP9dDLKTGn+1KrYHm7KrXaaePdgQLGotG8/zOlK/nEU7vW6rP7ov+1VIk512NiuChfSrbOMT0v9d8nQTC9qHpSz9LOXE5U0tismuf1P/Ic5Dx8+vPeGRW8Y90nkg43/iUo005X/diV//0163P5b7YytE2fpw/jVO/1P8vF34sFqqJezrClNLRopIiLTBub9586dO3/+/NmzZzds2LBu3br169dXtZhKRKQOmACIiMhU4v79+yQAhw4dOnjw4Mcff/z69eulS5c27dcsIiItMAEQEZGpxL17986fP08C8D//8z/x1mxX29aJiEifEoBXr17dekO+v0GcYbFq1aqvvvpq06ZNrbchExERibd+P/74Y77z5cWLFydOnCjcVBSuXbv27NmzNWvW/Od//ueuXbs2bNgw7rcFRESmDf1LAG7cuDHaID+PPV7fJgFYu3bt+++/Tyg3ARARkRZEAjDU2BXqRQMSgGPHjhUWjl1QGGI+/PBDPvmhCYCISP8SgOvXr588efL777/Pj8teuXLlyBviZMqqtjMXEZFpSRwkFDtmnnjD+fPnCwt/8MEH27Zt27BhA59M/WPLoD4LLCIy2ehTAvD69etHjx7duHHjt99+Gx0dTX+fMWMGQZk04KOPPnIPh0nOzJkzh4eH6SYGUQbgefPm1WSrLBGZVLzVII7+ffDgwenTp2/dupWPLDnz588nUpEGfPzxx4YsEZGgT9EwHcX85MmT/OxJvm/durXDk0RlsMS5fbt27SKdW7Vq1aZNmzo8SVFEpEfEc4DHjx8vXbq0sMD69es3b97c4iRUEZEa0u8EgEkkn+nvS5YsibOgTQAmP/Pnz//ggw9iz43FixfTcSYAIjJYIgEgOsVbAWNh6CFwmQCIiOT0NQF46623CMTPnj1Lf587dy6Bm6zABGDyE08AGG43btw4Z84c/knfDVooEak1RCQC0erVq58+fVpYYHh4OEYZEwARkUSfEgAib6za7M/lpBcw6V/cYNCCiIj8PwsalK3/ERGRQnwjSkRERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNaLKBOD169cV1iYiIiIiNWTGjBmDFmGaU00C8OTJk1tvePr0aSV1ioiIiEitmD9//rsNli5dOmfOnEGLM22pJgFg0n/lypXR0dFTp049ePCgkjpFREREpFYsWbJkU4O3337bBKB3VJYAXL58+ejRo99///3NmzcrqVNEREREasWqVaueP3/O7H/dunWDlmU6U00C8OzZM+b9586dO3LkyNWrVyupUzpn5syZs2fPJlHmk++DFkdERGQ68PLlSyajL1684HPQstSF9evXr1y5ctOmTah90LJMZ9wFaDowPDy8YsWK5cuX8zlv3rxBiyMiIjIduHPnzu+//37t2jU+3elEphMmANMBJv2rVq0aGRnZtm3bokWLBi2OiIjIdODixYvHjx9/+fIlOYAJgEwnTACmA8PDw6tXr965c+cXX3yxbNmyQYsjIiIyHWD2/+LFi+vXr7srpUwzTACmA7Nnz3777beXL18eK+cGLY6IiMh04P79+0uXLl2wYIEJgEwzTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBMAEREREZEaYQIgIiIiIlIjTABERERERGqECYCIiIiISI0wARARERERqREmACIiIiIiNcIEQERERESkRpgAiIiIiIjUCBOA6cCrV6+ePn16//79W7duzZ5tn4qIiFTAnTt3Hj58+OzZs0ELIlIxThanA0+ePLl8+fKxY8dmzpy5ePHiQYsjIiIyHTh//vypU6du3rz5+vXrQcsiUiUmANOBp0+fXrlyZcaMGbdv316wYMGgxREREZkOMPW/dOmSCYBMP0wApgMkAJcvX75169bp06dnzZo1aHFERESmA8+ePXv8+PGTJ09MAGSaUU0CMHv27EWLFq1YsWL9+vULFy6spE4RERGRAcL0xufqfeb9999fvnw5k0lvaPaUahKA4eHhVatW7dixg966d+9eJXWKiIiISK1YunTpyMjIypUr58yZM2hZpjPVJADz5s1bvXo1ifKyZcuePHlSSZ0iIiIiUiveeuut5Q1MAHpKlU8AmP1v3br11atXldQpIiIiIrVi5syZs2fPZvbvtuY9pRrl0ltzG1RSm4iIiIiI9AizKxERERGRGmECICIiIiJSI/4PKl5aZgJH6k8AAAAASUVORK5CYII=" name="Object2" align="left" width="272" height="69" border="0"><br clear="left"><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 100%">
<img src="data:image/png;base64,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" name="Object3" align="left" width="235" height="142" border="0"><br clear="left"><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 100%">
<img src="data:image/png;base64,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EEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEklIYQQQohAJJWEEEIIIQKRVBJCCCGECERSSQghhBAiEEmluPHx48fx8fHu7u6MjIzNm1WxQgixNLq6ukZGRt6/fz81NfXu3bvm5ubR0dFkZyptGBwcfP36tWpsNZBHjxtIpbGxsY0bN05PT2/atCnZ2RFCiDRjNML8/Pzk5GRnZyd/vH37NtmZShuotN7eXkml1UBSKW6YVGIw1N/fj2BKdnaEECLNeP8ZOlKkUl9fn57Qxw4+aHZ2dm5uLtkZWYP8xwpzc3MrKirq6upKSkqSnR8hhBBCiKRRW1tbWlqalZXltvxHKhUXF6OTMjMzx8fHk5c3IYQQQogkU1JSglratWuX2/L/pBI6qaKiYn5+PmlZE0IIIYRINllZWeik3Nxct+X/vYCDysrK5GVMCCGEECIV0Yw5IYQQQohAJJWEEEIIIQL5/wAm/HkhBouRYgAAAABJRU5ErkJggg==" name="Object4" align="left" width="235" height="134" border="0"><br clear="left"><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>Figure
2. The realization process</b></span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Pretty
simple, actually. The end result is that every color in the logical
palette ends up with a mapping to one of the entries in the system
palette. This mapping index remains current until the next time the
palette is realized. An application using the logical color to draw
uses this system palette mapping for actual drawing to the screen.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">If
any entries in the system palette were changed during the
realization, the driver is notified of the change and updates the
hardware palette with the new colors. Also, if the palette was a
foreground palette, the WM_PALETTECHANGED message is broadcast to the
system so that other applications are aware of the systemwide change.
More on the messaging process below.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">There
are some interesting things that should be noted again. If a
background palette is being realized and there are still entries in
the system palette that are marked as unused, the background palette
can set them. The foreground palette only has priority, not
exclusivity. Also, if the foreground palette wants more entries than
are actually available for setting in the system palette, too bad.
When all of the unused system entries are used up, subsequent logical
palette entries get mapped to the nearest color. As soon as a new
foreground palette is realized, the system palette is effectively
flushed of old priorities, and all of the nonstatic entries are once
again open for use. Finally, identical colors are matched to existing
entries in the system palette, eliminating color redundancy.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Bitmap
Storage and Foreground Mapping</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Device-dependent
color bitmaps are stored as a collection of indexes (not colors) on
palette devices. To achieve the desired color on the screen, the
indexes must refer to a correct color in the hardware palette. The
desired colors, though, are based on the colors of a logical palette,
and the trick is to have the indexes work properly no matter how this
palette is realized and mapped to the system palette. Clearly the
indexes have to be relative to something in the logical palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">One
possible solution is to have the bitmap indexes be indexes into the
logical palette. When the palette is realized, a translation table is
established to correspond to the way the palette was mapped to the
system palette. All subsequent blting operations going from the
bitmap to the screen involve translating each pixel from a logical
index to a physical index. This translation greatly slows down the
blts.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">To
avoid this slowdown in many cases, the Palette Manager uses a
slightly modified indexing system using foreground indexes. The first
time a palette is realized, the Palette Manager builds up a
foreground mapping for that palette. If the palette is being realized
as a background palette, the foreground mapping is done without
actually updating the system palette. This foreground mapping is the
way the palette maps into the system palette when it is realized as a
foreground palette. </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>This
mapping is a constant for the palette.</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
(If any palette entries are changed, the mapping must be
regenerated.) In terms of implementation, each entry in the logical
palette has a foreground index associated with it.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Any
subsequent time that the palette is realized as a foreground palette,
the realization work is already done, and there is no need for any
color-matching. The foreground indexes set the necessary colors in
the system palette, and every color in the logical palette is
automatically mapped to the expected physical color. For this reason,
realizing a foreground palette is faster if the palette has already
been realized in the past.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Bitmaps
are stored using these foreground indexes. What does this mean for
blting from memory? If the palette that corresponds to the bitmap is
the currently realized foreground palette, the indexes in the bitmap
refer directly to the current system palette. There is no need for
translation! This makes for quite a speed improvement over constantly
translating. Of course, if the palette is a background palette,
translating every index in the bitmap may still be necessary. The
translation in this case is from the foreground index to the current
mapping index.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">As
a bonus, a bitmap that is based on the default palette also requires
no translation because the default palette's mapping never changes
(it maps directly to the static colors). The result is that
applications that do not explicitly use palettes get &quot;fast&quot;
blting regardless of their foreground/background state.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">There
are limitations to this scheme. Most critical to note is that the
bitmap is inextricably tied to the palette. If a different palette is
used during the blting operation, the bitmap is essentially
meaningless because the indexes no longer have a valid reference
point. The other limitation is a bit more subtle. Because only
foreground indexes are used, and they are restricted by the presence
of the static colors, an 8-bit image that does not contain all of the
static colors in its original color table effectively loses whatever
colors could not be set directly in the system palette. The
device-dependent bitmap has lost color information.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
application does not need to concern itself with any of the index
translation work; it is all automatically handled by GDI and the
driver. The application does need to worry about using the correct
palette with the bitmap before blting. A more detailed discussion of
blting from memory bitmaps is found below.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Palette
devices handle monochrome bitmaps the way other devices do: There is
no dependence on any palette information, and monochrome-to-color
blts are performed with the usual foreground/background mapping.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Messaging</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Windows
defines three palette-related messages: WM_QUERYNEWPALETTE,
WM_PALETTECHANGED, and WM_PALETTEISCHANGING. The first two are useful
for application implementation, but the third is a holdover from an
earlier design and should be ignored.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
WM_QUERYNEWPALETTE message indicates window activation and provides
an application the opportunity to realize its palette. This is the
first and ideal opportunity to realize the drawing palette in the
foreground and is usually a good time to get all the palette
management organized. Windows does not actually use the return value.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
WM_PALETTECHANGED message informs all applications that the system
palette has changed, changing the screen color of pixels mapped to
the previous setting of the hardware palette. This message is sent
when a foreground palette realization has caused at least one entry
in the system palette to change. This is a purely informational
message. Because this message is broadcast to the system, currently
running applications receive it in Z-order, and this order determines
palette priority. The usual response to this message is to re-realize
any palettes currently used for display and to repaint using the new
palette realization. Applications not using any palettes for the
display are not affected by the change in the system palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>wParam</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
parameter of the message identifies the window that caused the system
palette to change. To avoid excess processing and a potentially
recursive situation, the application causing the WM_PALETTECHANGED
message should avoid realizing another foreground palette in response
to this message. </span></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">If,
in response to the WM_PALETTECHANGED message, an application simply
forces a repaint without realizing its palette, the application
effectively loses its place in the Z-order of realization because the
resulting WM_PAINT message is processed only after all other
applications have had an opportunity to realize their palettes. This
can be detrimental to color accuracy.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Below
is a good starting point for palette messaging:</span></font></font></p>
<p class="western" align="left" style="line-height: 0.02cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">case
WM_PALETTECHANGED:</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">if
(wParam == hWnd) // Responding to own message.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
Nothing to do.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">break;</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">case
WM_QUERYNEWPALETTE:</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">hDC
= GetDC(hWnd);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">hOldPal
= SelectPalette(hDC, hPalCurrent, FALSE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">i
= RealizePalette(hDC); // Realize drawing palette.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.39cm">
<br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">if
(i) // Did the realization change?</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">InvalidateRect(hWnd,
NULL, TRUE); // Yes, so force a </span></font></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
repaint.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">SelectPalette(hDC,
hOldPal, TRUE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">RealizePalette(hDC);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">ReleaseDC(hWnd,
hDC);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">return(i);</span></font></font></font></p>
<p class="western" align="left" style="line-height: 0.12cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">More
intricate responses to these messages are discussed below.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Notice
that no painting is actually performed directly in response to these
messages. The messages simply provide a mechanism for realizing a
palette and establishing its relative priority. Once the palette is
realized, no other palette can nullify the results of that
realization (until the next foreground palette is realized). For the
foreground applications, the WM_QUERYNEWPALETTE message indicates
that it is time to realize the foreground palette, the one that
controls the system palette; its realization does not change until
that application realizes a different foreground palette or the
application is deactivated and loses its foreground status, allowing
another application to realize a foreground palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">When
the application does actually repaint and realizes the palette again,
the mapping is already set, and the system palette does not change.
Realizing a palette in response to these messages gets the palette
&quot;into&quot; the current system palette picture so that later
drawing can simply reference this earlier work.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Using
Colors</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
next step in understanding the Palette Manager is to see how it
interprets the colors used by palette-using applications. The
simplest colors are the ones found in the color table of a
device-independent bitmap (DIB); they are always relative to the
currently selected palette (based on the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>hDC</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
parameter to </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SetDIBits</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">,
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>StretchDIBits</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">,
or </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SetDIBitsToDevice</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">)
and are color-matched to that palette on a palette device. If
DIB_PAL_COLORS is used in the DIB function, the color table has
indexes into the palette, so the matching is already done. Because
the colors are used to define a single pixel in the image, dithering
is not an option.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Colors
passed directly to GDI (for example, using the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>CreatePen</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">,
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SetTextColor</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">,
or </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>FloodFill</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function) are of three possible types. The easiest type uses palette
indexes (the color is built using the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>PALETTEINDEX</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
macro), and it always maps to the color referenced in the palette.
Palette-relative colors (built using the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>PALETTERGB</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
macro) specify that the color should be color-matched to the current
logical palette and that the nearest color in that palette should be
used; on a nonpalette device, the original RGB color is used as is.
The last color type, the pure RGB color (built using the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>RGB</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
macro), is </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>not</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
mapped to the current logical palette. It is handled by the device
driver as though that driver were a VGA driver. To be precise, the
color is mapped to the nearest static color, and if a brush is being
created, the color is dithered using the static colors. No dithering
is done for any color based on a logical palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Palettes
on Nonpalette Devices</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
Palette Manager also functions on devices that do not support
palettes. Palette selection works the same, although the
foreground/background status is not maintained. Realization is simply
ignored. Explicit references to the logical palette (</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>PALETTEINDEX</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
colors, DIB_PAL_COLORS color tables) are dereferenced, and the actual
RGB color in the logical palette is used for the operation. Colors
defined with the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>PALETTERGB</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
macro or the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>RGB</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
macro are used as RGB values. No palette-related messages are sent.
The goal is to allow applications to use palettes in a
device-independent fashion and to not worry about the actual palette
capabilities of the device driver.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.56cm">
<font color="#000000"><font face="Times New Roman, serif"><font size="4" style="font-size: 16pt"><span lang="en-US">More
Details</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
information above is a broad overview of the design of the Palette
Manager. The Palette Manager has many nuances and side effects that a
developer of a palette-using application should be aware of. The rest
of this article describes these subtleties.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Device
Capabilities</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Palette
devices have several entries in their capability table that are of
interest. All are accessible using the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>GetDeviceCaps</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function. First, the RC_PALETTE bit of the RASTERCAPS word is set to
indicate that this device is indeed a palette device. The number of
entries in the device's hardware palette is available with the
SIZEPALETTE index; this value is set to 256 on a standard palette
driver. The NUMRESERVED index specifies how many static colors the
device is maintaining. (This could be a number other than 20, but
because there are some problems in the Palette Manager in dealing
with values smaller than 20, they are not common.) The COLORRES index
identifies the actual color resolution of the device, that is, the
number of bits of color resolution that the device actually
maintains. On 256-color devices, this value is often 18, with 6 bits
each for red, green, and blue. (As a result, a color component value
of 0x11111111 is equivalent to a value of 0x11111100.) The Palette
Manager operates with full 8-bit color resolution, so it is up to the
application to handle any decreased resolution. Seeing as how the
device can support 256 colors, one might expect the NUMCOLORS index
to specify 256 as the number of supported colors. This, however, is
not the case. Because the driver does not control most of those
colors, the appropriate value for NUMCOLORS is 20, which is the
number of static colors (although this may change in future
versions). Similarly, when the driver enumerates pens and brushes and
defines values for NUMPENS and NUMBRUSHES, it only duplicates the
functionality of a VGA driver, enumerating pen and brush variations
based on the VGA colors.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Palette
Creation</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">When
a palette is created, the application has the ability to control how
each color is mapped to the system palette by using the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>peFlags</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
field in each color's </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>PALETTEENTRY</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
structure. The most common setting is 0, which means this is a normal
color request and follows the standard rules of realization. </span></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
PC_EXPLICIT setting allows an application to map a palette entry
directly to a specific entry in the system palette. The color in the
system entry palette is not affected, so the logical palette entry is
mapped to reflect the current contents of the system palette. This
mapping is not affected by the foreground versus background status of
the palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Things
get more interesting with the PC_RESERVED and PC_NOCOLLAPSE flags.
The PC_RESERVED flag is used in conjunction with the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>AnimatePalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function for palette animation (more details below). A color with
this flag is not color-matched to any entry in the system palette; it
can only occupy an unused entry. If an unused entry is available, the
Palette Manager sets the color and marks the entry as used and
reserved, which means that no other logical color can be
color-matched to the entry. The entry is reserved for exclusive use
by this logical palette entry. If there are no unused entries
available, the logical palette entry is mapped to black (index 0) in
the system palette and cannot be animated. PC_NOCOLLAPSE mapping is
very similar to PC_RESERVED mapping in that an unused entry is always
chosen over color-matching, but the color is matched if there are no
unused entries. Also, once the color is set in the system palette, it
is an ordinary used entry, and other color requests can be matched to
it. The PC_NOCOLLAPSE flag is useful in situations where the
application needs to guarantee that its palette entries are realized
as a block in the system palette. Entries marked with PC_NOCOLLAPSE
cannot be animated.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Color-matching
Algorithm</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Color-matching
is performed using a closest-Pythagorean-distance algorithm. The
number being minimized is (deltaR</span></font></font><font color="#000000"><sup><font size="1" style="font-size: 6pt"><span lang="en-US">2</span></font></sup></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
+ deltaG</span></font></font><font color="#000000"><sup><font size="1" style="font-size: 6pt"><span lang="en-US">2</span></font></sup></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
+ deltaB</span></font></font><font color="#000000"><sup><font size="1" style="font-size: 6pt"><span lang="en-US">2</span></font></sup></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">).
While this may seem a simplistic approach, the results are actually
quite good. </span></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Methods
for Displaying Multiple Palettes</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">If
an application needs to display more than one palette-based image at
a time, it has several options for managing the multiple palettes:</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Use
a rainbow palette</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Use
a conglomerate palette</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Use
prioritized palettes</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Use
color analysis</span></font></font></p>
<p class="western" align="left" style="line-height: 0.01cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">A
single palette that contains a rainbow of colors allows all the
images to be displayed with approximate colors. None will look
accurate, with the exception of very simplistic ones made up of basic
colors that are found in the rainbow. This approach has the same
effect as using a 256-color driver with a fixed hardware palette and
has all of the related limitations.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Simply
combining all of the palettes into a giant, conglomerate palette that
is used for all drawing accomplishes the basic task. Any colors that
cannot be set in the system palette are matched to existing colors.
While simple concatenation of the palettes works, a better color mix
can usually be encouraged with a more thorough merging (entry 0 comes
from palette A, entry 1 from palette B, and so forth). If the
original palettes are already sorted so that the more significant
colors appear earlier in the palette, the resulting merged palette
has the most significant colors from all the images at the front of
the palette. Notice that the realization process will automatically
collapse duplicate entries.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
giant palette approach preserves some image quality across all
images, but it may not always be convenient in coding terms. For
example, adding another image for display necessitates building and
realizing a new palette, which also means that all bitmaps based on
the original palette must be rebuilt. Also, DIBs maintained with
DIB_PAL_COLORS tables need to have the tables updated with every
change to the merged palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Another
approach is for the application to manage the individual palettes as
separate entities (this often makes managing separate images easier)
and prioritize them for color-matching by forcing all but one of the
palettes to be realized in the background. This is accomplished by
using </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SelectPalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
as follows:</span></font></font></p>
<p class="western" align="left" style="line-height: 0.02cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
Select the chosen dominant palette.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">SelectPalette(hDC,
hDominantPalette, FALSE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">RealizePalette(hDC);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.39cm">
<br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
Select a lower priority palette.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">SelectPalette(hDC,
hLowlyPalette, TRUE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">RealizePalette(hDC);</span></font></font></font></p>
<p class="western" align="left" style="line-height: 0.12cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">When
the application is in the foreground, the dominant palette
establishes itself in the system palette. The lower priority palettes
used by the application are then matched to the first one and, if any
room remains, could change the system palette as well. The dominant
image looks the best because it was the first to set colors, and the
subsequent images look as good as they can given the status of the
system palette. It is important to note that one palette must be
realized without being forced into the background; this ensures that
the application gets access to the system palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">For
the background palette approach to work, the application must ensure
that the secondary palettes are realized before any other application
can realize another palette. When the application realizes its
dominant palette in response to the WM_QUERYNEWPALETTE message, the
application needs to realize its secondary palettes in response to
the resulting WM_PALETTECHANGED message (</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>wParam</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
parameter equal to </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>hWnd</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">).
Otherwise, all of the other applications have a chance to realize
their palettes first, and the foreground application's background
images lose out.</span></font></font></p>
<p class="western" align="left" style="line-height: 0.02cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">case
WM_QUERYNEWPALETTE:</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">hDC
= GetDC(hWnd);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">hOldPal
= SelectPalette(hDC, hDominantPal, FALSE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">i
= RealizePalette(hDC); // Realize dominant palette.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">SelectPalette(hDC,
hOldPal, TRUE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">RealizePalette(hDC);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">ReleaseDC(hWnd,
hDC);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.39cm">
<br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">if
(!i) // No realization change, but let </span></font></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
secondaries realize.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">SendMessage(hWnd,
WM_PALETTECHANGED, hWnd, NULL);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">else
// Palette did change. Repaint dominant image.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">InvalidateRect(hWnd,
lpDominantRect, 1);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">return(i);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.39cm">
<br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
This message is received for 3 reasons:</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
- Result of dominant palette realization (wParam == hWnd)</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
- Dominant palette did not actually change realization </span></font></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
(wParam == hWnd)</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
- Some other application changed system palette (wParam != hWnd)</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">case
WM_PALETTECHANGED:</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">if
(wParam == hWnd) // Dominant palette realization caused </span></font></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
this.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
Realize the secondary palettes, forcing them into the</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
background.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
If the realization changes the system palette mapping,</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
then force an appropriate repaint.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">{</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">hDC
= GetDC(hWnd);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">hOldPal
= SelectPalette(hDC, hLowlyPalette, TRUE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">if
(RealizePalette(hDC))</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">InvalidateRect(hWnd,
lpLowlyRect, 1);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">SelectPalette(hDC,
hOldPal, TRUE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">RealizePalette(hDC);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">ReleaseDC(hWnd,
hDC);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">}
else {</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
Normal palette adjustment/repaint. Dominant palette</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
needs to be realized here as well.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">hDC
= GetDC(hWnd);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">hOldPal
= SelectPalette(hDC, hDominantPalette, TRUE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">if
(RealizePalette(hDC))</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">InvalidateRect(hWnd,
lpDominantRect, 1);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">SelectPalette(hDC,
hLowlyPalette, TRUE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">if
(RealizePalette(hDC))</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">InvalidateRect(hWnd,
lpLowlyRect, 1);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">SelectPalette(hDC,
hOldPal, TRUE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">RealizePalette(hDC);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">ReleaseDC(hWnd,
hDC);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">}</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">break;</span></font></font></font></p>
<p class="western" align="left" style="line-height: 0.12cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
background palette approach to multiple palettes has the advantage of
being very simple to code and to manage. The main limitation is that
for images with many colors, only one image is displayed optimally;
the other images suffer because their colors are matched to existing
colors instead of being exact. The effect is identical to the Palette
Manager's mechanism for handling multiple applications, each with a
single palette, but in this case a single application is determining
the priorities of multiple palettes. The MULTIPAL sample application
on the Microsoft Developer Network CD uses this approach to manage
multiple palettes.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Color
analysis can provide the optimal solution. The application can
analyze the color use in the images that are to be displayed and come
up with the ultimate palette that contains a mix of colors sufficient
to display all of the images in the best possible manner. Of course,
this can be done in varying levels of complexity and exactness and is
not recommended for most applications. Once a good color-use analysis
is written, it can also be used nicely for creating idealized
palettes for images with 24-bit color information and for other
similar color-tracking purposes. This type of approach, though
potentially very pleasing visually, tends to be on the slow side and
is not trivial to code.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Contending
with Palette Changes</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">When
the system palette is changed by the foreground application, pixels
on the screen that were mapped to entries that have changed are no
longer correctly colored. The rest of the system needs to adjust to
this change to maintain visual integrity.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Some
applications and situations are not affected by this type of change,
and they require no adjustments. Because the static colors do not
change, applications that use only static colors (including all
applications that do not use palettes explicitly) are not affected by
the system palette change; this is one of the advantages of the
static colors. Similarly, any pieces of a palette-using application
that are drawn using only static colors do not change. The
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>RealizePalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function returns a value for the number of entries in the logical
palette that were remapped during the realization; this is the number
of entries that were mapped to the system palette differently from
the previous mapping. Do not confuse this with the number of entries
in the system palette that changed. When the return value is 0 and
the logical palette was used to draw the image currently on the
screen, no pixels in the drawing were affected by the system palette
change.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">It
is important to remember that palette-based memory bitmaps are not
affected by changes in the system palette. To display the bitmap
after a system palette change, simply select and realize the
associated palette and blt the bitmap to the screen. The re-realized
palette ensures that the bitmap's color-mapping is based on the
current system palette. The bitmap may not look as good as it did
when its palette was the foreground palette, but it looks as good as
it can using the available colors in the system palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.42cm">
<font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"><b>Adjusted
repaints</b></span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
simplest, although not usually the quickest, method of handling a
system palette change is to repaint the entire client area. This
approach also produces the most accurate results. To map properly to
the new system palette, the logical palette being used for the
drawing must be re-realized before the drawing begins. The repainting
can be optimized if it is known that some parts are not affected by
the palette change. Because the repainting is based on a new mapping
of the logical palette, the physical colors used are based on the
current system palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.42cm">
<font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"><b>UpdateColors</b></span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>UpdateColors</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function allows the application to simply update all of the visible
pixels in its screen DC to match to the current system palette. The
Palette Manager maintains three mappings for each entry in a logical
palette. Two of these, the foreground index and the current index,
have already been discussed. The third is the previous index; it is
simply the current index from the previous realization. After an
application re-realizes its palette in response to a change in the
system palette but before it repaints itself, the image displayed by
the application is drawn with this previous mapping. When the
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>UpdateColors</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function is called, the Palette Manager creates a translation table
from the previous mapping to the current mapping and passes it to the
device driver. The driver then translates each pixel in the
application's client area from the old mapping to the current
mapping. The result is that the image is now drawn using the current
mapping and therefore is based on the current system palette. Note
that the logical palette </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>must</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
be re-realized after the system palette change for the updating to
work properly.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
advantage of using this function is that it is simple to use and
usually faster than repainting. The big disadvantage is that
information is lost with every subsequent update, degrading the color
quality of whatever is being updated. An application can compensate
for this disadvantage by limiting the number of consecutive updates
that it performs. For example, it can allow only two </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>UpdateColors</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
calls before a complete repaint:</span></font></font></p>
<p class="western" align="left" style="line-height: 0.02cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">case
WM_QUERYNEWPALETTE:</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">hDC
= GetDC(hWnd);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">hOldPal
= SelectPalette(hDC, hPalCurrent, FALSE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">i
= RealizePalette(hDC); // Realize drawing palette.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">SelectPalette(hDC,
hOldPal, TRUE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">RealizePalette(hDC);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">ReleaseDC(hWnd,
hDC);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">if
(i) // Did the realization change?</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">{</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">InvalidateRect(hWnd,
NULL, TRUE); // Yes, so force a </span></font></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
repaint.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">gUpdateCount
= 0; // Starting update tracking </span></font></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
from scratch.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">}</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">return(i);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.39cm">
<br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">case
WM_PALETTECHANGED:</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">if
(wParam != hMyWnd)</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">{</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">hDC
= GetDC(hWnd);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">hOldPal
= SelectPalette(hDC, hPalCurrent, TRUE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.39cm">
<br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
Only need to repaint if logical palette is remapped.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">if
(RealizePalette(hDC)) // Realize drawing palette.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">{</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
If fewer than two updates have been done, we can </span></font></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
update.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">if
(++gUpdateCount &lt; 2)</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">UpdateColors(hDC);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
Otherwise, it's time to repaint from scratch.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">else</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">{</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">gUpdateCount
= 0;</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">InvalidateRect(hWnd,
NULL, TRUE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">}</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">}</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">SelectPalette(hDC,
hOldPal, TRUE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">RealizePalette(hDC);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">ReleaseDC(hWnd,
hDC);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">}</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">break;</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.39cm">
<br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">case
WM_PAINT:</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">if
(gUpdateCount &gt; 0) // If painting after some </span></font></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
updating...</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">{</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">BeginPaint(hWnd,
&amp;ps);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">EndPaint(hWnd,
&amp;ps);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">gUpdateCount
= 0; // Starting update tracking from </span></font></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
scratch.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">InvalidateRect(hWnd,
(LPRECT) NULL, TRUE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">break;</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">}</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">else</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
Usual paint stuff.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">break;</span></font></font></font></p>
<p class="western" align="left" style="line-height: 0.12cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
update count is also reinitialized to 0 when the application repaints
as a foreground application or when it needs to repaint after any
part of the window has been updated with </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>UpdateColors</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">.
In both cases, the entire window is invalidated to guarantee a clean
and optimal repaint.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.42cm">
<font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"><b>Moving
into the foreground</b></span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">When
a palette-using application becomes the foreground application (that
is, when the application is activated), it should re-realize its
palette in the foreground and repaint as appropriate. The message to
key on is the WM_QUERYNEWPALETTE message. This situation is very
similar to a system palette change in that if the application doesn't
have anything to repaint, it doesn't actually need to repaint. The
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>UpdateColors</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function is of little use in this case; a full repaint is the way to
go. The key operation of being activated is the realization of the
palette in the foreground.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.42cm">
<font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"><b>Life
after application termination</b></span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">When
a palette-using application is terminated and its top-level window is
destroyed, the system needs to adjust to allow other applications
access to the palette. If the next application to be activated is a
palette-using application, there isn't much confusion because this
application realizes its palette in the foreground in response to the
WM_QUERYNEWPALETTE message, and palette normalcy is restored. If, on
the other hand, the next application to be activated does not use
palettes, who gets to control the palette? The system behavior
differs slightly between Windows version 3.0 and version 3.1. </span></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">In
Windows version 3.0, when an application's top-level window is
destroyed and that window used a palette, the Palette Manager flushes
out the system palette by marking all nonstatic entries as unused.
This allows other applications access to the nonstatic entries. Next,
the WM_PALETTECHANGED message is broadcast to the remaining
applications and the desktop window.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
Palette Manager in Windows version 3.1 behaves the same way except,
in addition, it sends the WM_QUERYNEWPALETTE message to the next
palette-using application in the Z-order if the new active
application does not use palettes. If no palette-using applications
are currently running and the desktop is drawn with a bitmap, the
desktop is given palette priority. A palette-using application in
this case is defined as an application that has at some point
explicitly called </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SelectPalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Before
terminating, the terminating application only needs to worry about
deleting any palette objects it created. The system handles the rest.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Memory
Bitmaps</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Bitmaps
on palette devices do not contain color information. Without an
accompanying palette to provide the color information, a bitmap is
like a paint-by-numbers picture without the paint. </span></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Memory
bitmaps on palette devices are mostly like bitmaps on other devices.
The one glaring difference is that each pixel is an index instead of
an actual color. The color information is located in the palette that
was used for drawing onto the bitmap. Because of this, using the
bitmaps involves also setting up the correct palette before any
operation is performed. The connection between memory bitmaps and the
correct palette cannot be stressed enough. A color bitmap is only
meaningful when used with the palette on which it is based; the
palette is the one that actually defines the color. Of course, the
application must first realize the palette to make it useful.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Monochrome
bitmaps are treated the same across all devices. Because they contain
no color information, there is no attached palette or a need for
extra processing on a palette device.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.42cm">
<font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"><b>Interesting
blt behaviors</b></span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Blting
from the screen to the screen involves no translation because all
pixels are based on the same system palette, while blting from memory
to the screen is done with a simple table translation that is set up
by the Palette Manager during realization. On the other hand, blting
from a memory bitmap to another memory bitmap is not trivial if the
two bitmaps are not based on the same palette. The correct way to blt
from one memory bitmap to another is to use DIBs, as follows:</span></font></font></p>
<p class="western" align="left" style="line-height: 0.02cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">SelectPalette(hDC,
hPalette1, TRUE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">RealizePalette(hDC);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">GetDIBits(hDC,
hBitmap1, 0, height, lpBits, lpInfo, DIB_RGB_COLORS);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.39cm">
<br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">SelectObject(hMemDC,
hBitmap2);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">SelectPalette(hMemDC,
hPalette2, TRUE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">RealizePalette(hMemDC);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">StretchDIBits(hMemDC,
DestX, DestY, Xext, Yext, SrcX, SrcY, Xext, </span></font></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">Yext,
lpBits, lpInfo, DIB_RGB_COLORS, SRCCCOPY);</span></font></font></font></p>
<p class="western" align="left" style="line-height: 0.12cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">By
using the DIB format, an application can disassociate the bitmap
information from the palette and then establish a new relationship
between the image and the second palette. Windows does not
automatically perform this translation.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">If
the two bitmaps share a single palette, a simple blt between the two
works without modification because the indexes in both bitmaps
represent the same colors. Also, if the bitmaps use only static
colors (meaning that effectively they are not based on a palette),
the blting needs no translation.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.42cm">
<font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"><b>Stretched
blts</b></span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
term </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>stretched
blt</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
refers to a blt operation that involves the stretching or shrinking
of the source rectangle to fit the destination rectangle (technically
speaking, when the source and destination extents do not match). A
stretched blt is not necessarily or uniquely a result of calling the
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>StretchBlt</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function. The </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>BitBlt</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function can result in a stretched blt if the source and destination
DCs have different mapping modes and, when the coordinates are
converted to device units, the extents are no longer the same.
Likewise, the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>StretchBlt</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function can result in a blt that is not a stretched blt if the
extents are equal in device units.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
above DIB-based translation is performed automatically by GDI's
stretched blt simulations. As a result, stretched blts between two
DCs with different base palettes are performed with a palette
translation, while a same-size blt operation is not translated. The
exception to this rule is drivers that perform their own stretched
blt operation (RC_STRETCHBLT bit in the RASTERCAPS capability word).
These drivers circumvent GDI simulations and do not do the palette
translation.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">GDI
simulations for a stretched blt also possess some interesting
behaviors when the source and destination are based on the same
palette. Because the stretching simulation is performed with DIBs,
the speed of getting and setting of the DIB data is a definite
concern. In cases where the two palettes are the same, the DIB
conversions are sped up using DIB_PAL_COLORS for the color table. The
problem is that the source image can contain colors that are not
actually in the logical palette on which it is based (for example, if
a static color is used to draw in a bitmap with a palette that does
not explicitly have the color). Pixels drawn with these colors cannot
be color-matched to the destination palette because only indexes are
used, and these pixels end up being mapped to black. This behavior is
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>not</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
limited to memory-to-memory stretched blts; it applies to all classes
of palette-based stretched blts. A simple application workaround for
this situation is to place the static colors in the logical palette
being used&mdash;they don't take up any room in the system palette
(they map to the existing static colors), and they allow the
DIB_PAL_COLORS color table to reference the static colors. Keeping
the source bitmap &quot;clean&quot; of nonpalette colors is another
safe approach.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.42cm">
<font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"><b>ROPs
on palette devices</b></span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Raster
operations do not mean much on palette devices. The driver views
every pixel as an 8-bit value and carries out the raster operation on
these values one bit at a time. The resulting 8-bit value is then an
index into the hardware palette. When this value happens to be in the
range of the static colors, there is consistency, but values outside
this range map to whatever color happens to be there. Predicting the
resulting index is further complicated by the application's not
knowing how its logical palette is mapped to the system palette;
finding the hardware index that is being used for a particular entry
in the palette is not straightforward. On top of that, the system
palette can change once the application is no longer in the
foreground, and repainting based on the new colors needs to be
recalculated from scratch.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Some
simple ROPs do work in a predictable manner. BLACKNESS and WHITENESS
are preserved in meaning on palette devices. Also, inverting a static
color results in another static color (consistent with the VGA color
scheme), so simple highlighting can be accomplished.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">DIB
Handling</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Converting
DIBs into a device-dependent form naturally lends itself to palette
use because the color table is essentially a palette. The whole
format, in fact, greatly resembles the setup of a palette device with
pixels represented as indexes into a color table. With 1-bit and
4-bit DIBs, if the colors in the table are boring (that is, black and
white for 1-bit and the 16 VGA colors for 4-bit), using a palette is
not required for color accuracy because the static colors and the
default palette suffice. For 8-bit DIBs, though, a palette is useful
for preserving color information on the screen.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">An
application creates a palette to go along with a DIB by simply using
the colors in the color table to define the palette. Note that the
RGB triples in the DIB's color table are stored in reverse order.
This palette is then used either to convert the DIB into a bitmap
using the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SetDIBits</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function (the palette then defines the bitmap) or to display the DIB
directly on the device.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">If
DIB_RGB_COLORS is used for the setting operation, the color table is
defined as RGB values, and the Palette Manager matches each color to
the current logical palette before the DIB is actually translated.
The matching process is eliminated when the application uses the
DIB_PAL_COLORS format for the DIB, using a table of indexes into the
logical palette as the color table (this does not apply to 24-bit
DIBs). Because the palette is created directly from the color table,
the indexing is a one-to-one mapping. Notice that using an index
table still works on nonpalette devices because every index is
dereferenced back to the original color that is found in the palette.
See the &quot;Using DIBs with Palettes&quot; technical article and
the DIBIT sample application on the Microsoft Developer Network CD
for more detailed information.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">DIBs
stored in the 24-bits-per-pixel format do not usually come with a
palette; to create a palette to enhance the image, the application
may be granted a suggested palette (indicated by a nonzero </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>biClrUsed</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
field), use a generic rainbow palette, or analyze the colors actually
used and build a palette to match. The process of converting a 24-bit
DIB into a device-dependent bitmap on a palette device is a slow one
because each color in the DIB is color-matched to the logical
palette. This makes the 24-bit format not exactly ideal for palette
devices. Yes, we are talking really slow.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.42cm">
<font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"><b>GetDIBits
on palette devices</b></span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Using
the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>GetDIBits</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function on a palette device can result in loss of color information.
When the destination DIB has a 1-bit format, the Palette Manager
builds a color table with black and white as the colors and maps each
color in the bitmap to these two colors. Similarly, it builds a color
table made up of the 16 VGA colors for converting device-dependent
bitmaps to 4-bit DIBs, and the colors in the bitmap are mapped down
to those colors. There is no attempt at determining an optimal
16-color scheme, and if an application wants to perform that kind of
work, it needs to build the 4-bit version of the DIB on its own
(probably based on an 8-bit DIB). A 24-bit DIB is built by the device
driver using the colors found in the accompanying palette; obviously
no new color information can be generated.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">More
interesting is the 8-bit DIB case. The Palette Manager builds a color
table composed of the 20 static colors (10 at either end of the
range) and 236 colors based on the logical palette being used. The
colors are chosen by looking at the palette's foreground mapping and
working backward; the resulting table is identical to the system
palette when the palette is realized in the foreground. Entries that
are not used by the logical palette are set to black. Any colors in
the bitmap that are not in the logical palette or among the static
colors are mapped to black. Because of the introduction of the static
colors into the color table, color information from the original
source is most likely lost. For example, calling </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SetDIBits</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
with an 8-bit DIB containing no static colors and then calling
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>GetDIBits</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
with the same bitmap and palette does not return the same DIB. In
fact, the only way colors are not lost is if the logical palette
contains fewer than 237 colors that differ from the static colors.
Remember, however, that &quot;excess&quot; colors were already
effectively lost when the DIB's palette was realized; any colors not
set in the system palette were color-matched to those that were.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">If
the application chooses the DIB_PAL_COLORS option in the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>GetDIBits</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function, the Palette Manager matches the color table calculated
above to the current logical palette to arrive at the indexes that
are placed in the table.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Intricacies
of the Realization Process</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Here
are some thoughts about a few peculiarities of the realization
process that may or may not be useful information for an application
writer. </span></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
default palette is always forced to be realized in the background.
More than that, the mapping is unchanging and is never recalculated.
The translation table set up for blting purposes is NULL (that is,
there is no translation).</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">When
a palette is realized for the first time, its foreground mapping is
calculated. So if the palette is being realized in the background for
its first realization, two different realizations take place.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
next time the palette is realized in the foreground, no
color-matching takes place, and the previously computed foreground
mapping is used to realize the palette. To force a palette to
re-realize, use the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>UnrealizeObject</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
Palette Manager color-matches a logical color against the physical
palette by starting at index 0 and scanning each entry, in order, to
the end. This means that if a palette has colors that already exist
in the system palette, the realization may not result in a &quot;block&quot;
setting of colors. Colors will be mapped to existing entries instead
of taking up unused spaces.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">This
also leads to an interesting loophole. If an application realizes a
palette that contains one of the upper 10 static colors in such a way
that the color does not get color-matched (that is, with
PC_NOCOLLAPSE or PC_RESERVED), that color is placed in the system
palette. The next time a palette containing a high static color is
realized, that color is matched to the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>copy</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
of the static color that is present. At this point, that color has
lost all of the usual features of a static color: it doesn't invert
consistently, it takes up room in the nonstatic zone, and its index
entry does not match the real static color. One way to work around
this is to use colors that have almost the same values as the upper
static colors, that is, use RGB(0,0,0xFE) instead of RGB(0,0,0xFF)
for blue. Visually, the difference is indistinguishable, but to the
Palette Manager the two colors are different.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
Palette Manager tracks which of the entries in the system palette
have </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>ever</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
been used. This is not the eternal </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>ever</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
of time but the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>ever</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
of a Windows-based session&mdash;once the entry is set by an
application, that entry is no longer special. Initially, only the
static colors fit into this category. When a palette realization
starts replacing entries in the system palette, entries that have
never been used are set before entries that have been used in the
past. This means that if the first foreground palette that is
realized is small, the second foreground palette that is realized
starts using up system palette entries at the end of the first
palette's section as shown in Figure 3. The &quot;never used&quot;
status of an entry goes away once the entry is used, whether it be by
a different foreground palette or a background palette. </span></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 100%">
<img src="data:image/png;base64,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" name="Object5" align="left" width="305" height="132" border="0"><br clear="left"><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.42cm">
<br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 100%">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4IAAAGECAIAAADsrQkCAABtUElEQVR4nO3dd1sbabomcJNzBokkcgaTbIxtHNrd7u6ZnT7n2mt290PO6ene6ejUbRuwMdiYbDIm54wQGWnvrmfnbR0V2YIScP/+4IJShafeKvTeqlJV+TocjitERERERGfL1+gCiMjNtre3R0ZGRkdHp6enja6FiDxacnKyxWJJSUkxuhC6pBhDiS6ara2tgYGBurq69vZ2o2shIo9WWVl5+/ZtJFEvLy+ja6HLiDGU6KLZ3t4eHBysra19/vy5t4YdDBE5s9vtDodDfvJQKBmIMZTowgoMDEzVmEwmo2shIg8yNjY2rDG6ELrsGEOJLqyAgIDs7Ow7d+4UFBQYXQsReZB37955eXmNjo4aXQhddoyhRBeWv79/Wlra7du37969a3QtRORBkEGHhoa8vb2NLoQuO8ZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKREe1sbGxtrZms9nsdvuhI4eEhARrzqCwC0OaFz8/pfV2dnZkJltbWzLE398fs8I8fX35nn/RYCvLbuPt7S27DbcynSPcWYnoqGZnZ7s16+vrB4/p5eWVp8nOzj6b2i6G0dHRHs2ntJ7VasU2wkxmZmZkiMlkys3NxQyjoqLcWi8Zb2lpCdsaWzwgIEB2m/DwcKOLIjoqxlAiOirEmvfv3z99+nRlZeXgMRFDv/rqq7CwMMbQYxkbG6urq/v9998/pfVWV1e7urqePXvW19cnQzAfu92enJzMGHrxIIa2tbVhc2OHwZ8pKSmMoXSOMIYS0SE2NjaQbKxW6/Dw8NTUFLo9/H7wJIihyKyjo6MDAwOhmpCQkLOp9lxbXFz8+PFjU1MTgiPa+VjT7uzsYLtgSw0ODk5MTMzPzy8vL8tLGI6NeJSvUtC5s76+js3d0dGBzxjFxcXqmxhE5wJjKBEdYnZ2tqurq7Ozc2VlJTIy8m9/+9tRpvL29kYeGh8fLygoyM/P52HR02az2bq7u7GZEEqQOG/evFlZWSkvmc3mwsJCfBgwtkIiIheMoUR0iLm5uaampidPnphMJoSbW7duHXpo0+FwvHnzpqGhoa2t7auvvoqIiGAMPW0SQ589ezY/P49thAyakpIiLwUGBmITyElbIiLPwRhKRIdAvpmcnOzq6rqiBZqcnJzo6OiDJ7Hb7R8+fFhcXOzo6CgoKDj0JD59uu3t7dnZ2f7+/uXlZWRQi8Vy9epVo4siIjoIYygRERERGYAxlIiIiIgMwBhKRKciMjIyLS2tuLh4vzvI7OzsLGlsNpvLSwEBAZg8IiIiKChov/mvra3J5Nvb2y4vhYWFRWq8vb33m1ymVdeSKz4+PjKt/oKera0tmWR3d1fGwUD8iYEbGxsyDgqWl/z9/fdbtNVqlaWrS9cjNDLD48Lqy9wGBgYmJyfX19c3Nzenp6d7e3tVMwYGBsrIeFVG1l9PjfWVytECLi8tazCVFImtKe0gl6zJEBkTLSPzX11ddZkJGkRGPmCb6ssLCQmRqdDC8lJwcLDLxt2vPLSzrP4nloeqZP5oGVmEfuNihsctT+17sssd/OVd2fdA3bIX21TthETnF2MoEbmfl5dXamrqnTt3EhIS8vPzExMT9eMgLfX19bW3tw8PD7u8FB0djfxaVFR0QGSZn59v1+hvYpqVlXVVgxy257QOhwMLxbTyhVdn6N1lWn0MRfDt7u7GVIhEKA/jIEB8+PChra1tdnZWxsGayuQHxNCpqSmpXIUtNBEmQRDZb5IDIJcgcWJuHR0dnZ2dCwsLaFhZr7GxMalTxVC8KovW3w0qIyNDKte3+fj4uExVWFiIEQoKCkZGRvAnlivzVzkPa4Q0jJc+fvzoMhMEJhn5gG2qLw97ESbBhAjW8lJycrIMUS28X3nYu2SNPrE8FIO2xVaWfcN50YoqT76S67wD7Fee2vcwpiz6gBgq159hqomJCRliMplkQftNQnQuMIYSkfshhqakpCBNlpWVyX1D9eMgLfX397948eLdu3cuLyF8YA4IHEix+y0CkaWlpeWXX35BAnB5CfE3JCQE2e6AGIoo8Pr162fPnrm8hCyIsGI2mzMzM11eUpeiW61WlIfA4efnh4Dy6NEjhBsZB1HD19cXke6AG8WjYKwyKkeulSFffvklohJi936THAAxtKen57fffmtsbFzV2O125NERjbe3NxozLi5ORl5cXEScwqKRjVzmc/PmTSSw3NzcPWNofX09pvr6668R19CwCPFoverqaiw9JiYGU8mYaDrZphjfZSZJSUn4iW2652eS/cqrqKiQquTRCXgJiQ27E8Kcc87Tl/fq1ava2lqUFxsb+4nlIYYi//3666+Iidji2DH0xyBVeSUlJdj3UN7BrYfysMlkBIyP/wVsI3x82q9lsO8htj59+hQfe2QIRpYPe/tNQnQuMIYS0SHQ6yNyoX9Fj45+HcFL/6xz9K8Inche6BrVVHumz93dXSRIBI6JiQlJkPrEhvgojyjEyDJblY0Q3WTyvr6+lZUVVKKfHDlscnKyubkZaVImV2dIMeGCZmxsbHt7Wz8tZogu/+PHj1hitEathXyLABMicyANIK/gJcwQeUjNx8fHZ35+Hq8iqsrkCC7yEoZI5YODg2hG5E6VklEJwgpyDOIsRjh0izhDgwcGBiIhIUCjueSkrQzBIrAWWHcMlEX39vYuLy/jVf2KI5pPTU21trbGx8dL5arR0CDYUqgNKRxBDbkT1aJmbHREKKwgGlxadUqDWennj0rQeihAXsX81TY9uDwsGtlUbomKEIm4hu3ufCv+PcvDxlLloVlku5+sPIRXTItMjxbGOJizfitgFWZnZ7FlTSYTNvRRylM1YH2xV2Na7E6yu6rDomhkaVgsHfsV9i41FfY6rBSyKRaHvR1B9sDdhMhDMYYS0SHQ8ZeXlyOfyXfafvnlF3TVLuMUFBQgp6LjVzF0P3JiFHEHUU/OcmLmLuMgN6Bbffv2LbJmaWlpcXGxygRywAyTo/dFSQ8fPtR/ARSLQJ/9008/5ebmYlqkBzXO6OhomwYRMD09XR0nU7BqWLQknhKNPkxj0RgBUQOJDatQVVWlvk+JeIHJX7x4kZSUJJOrU+0Ir60arB2yyH/+53+qtkLBCOUIIkjeqPDgBnSBRsjJyUHZiMUtLS1YtY2NDWwO+VaDPGFcjudh0dh8WPHPP/9c32jyHVNs3OzsbEyLJKQ/loza6urq0LbSeoWFhWhALBfTYmti0dheeAnDsdVcpkVzobB3795hHMwfLaO26QHlYc5o7UePHg0NDWG3OfgRQfrysPoJCQnYKMcqTzbcAV8eOBmX8tS+J7scQip2OdnbVQxFPMUugZZBcsWeVlFRcevWLXkJexEKfv36NTIoxtF/25XoXGAMJaJDxMbGhoSEoEdvbGz8XaP/OuZXX30l3647dG4IFsgTCGpIcl9o0OW7jDM2Noal1NfXo4f29fVNS0szm83yEmIoemVETKQrmVydcVaQX58/f4453Lx5E6Mh6WImas7ouX/99VfkV8Sde/fuuUyL0IMJMTlyD3p6ZCwkBpdx0OWjeIyAxIYCEENRobyEQIBpsXaSUBEQVQydnp5GA0o4lspV0KmpqZGCMWd1DcoRyTlri8WSmZmJ5kLWwSoghv7lL3/B5kBIxQjIN8h5iJgIQFguVhzlucynqalJNq58jwJZbc8YOjc3h/aXmdy/fz9YIznv5cuXzc3Nsmr6jxZIS5j5q1evECXlbLL6xoXE0D3Lw7KkqqmpKbSM/nK0/coDbFwpT3a5o5cn32TQN9Encinv7t27MhxZU9YRCRgtieWqL4Sob1xg9THJnTt3VHjF7icFY+OuadxbLdHZYAwlokMEaJAyLf+mj6HoueU7cHKEDz9jYmKQX/U3urfb7Qhbs7Oz6FnR6SKlYYYu42xubmIOcrXN8vKyc/hASsAQhAbMx8fHB/FUvtXnDK9KnRKgnQ/Qoreen59HGEUHj5f0i5aT7FhBrA5+3/NcJ0It0i1WMDk5WbWJvIT1QmEzMzNYKOIggqzzSmGGmC2iLRYh5/TlJTUTTI6koq67Pwo0QpgGU8lF3FJevEbGQQNKo8mBYZPJpF9xpBmMhnGwUjabTX/A+4oWedGkyP1SLcaU4digmATFY3LMBEvXzx9NgUVjm6JZXLbpAeVhfFkWWvXQltmvPCzxU8pzF5fyVA1YIrYafup3OVSF4fgAgz0KLYD/JjUVXpKZYATs0nyUPJ1TjKFEdFToQa9duyaJx+UlxDv08X19ffInQliZ5tDnLZ0GxK+KigpkGiTUtLQ0/R2IPpFcIlNaWlpUVJSTk7Pn7aiOBXXevHkTubZZc9yvh54ZhB7ZrNnZ2fr0fxrkCyHY5VpbW9Ey+s8/xpZ3LO4tT65pQ37FbGW3cUuRRGeMMZSIjspkMqHzKywsdL4CQ7x8+fLp06dPnjyRl7y9vTc3N+WeMmdfp9lsRgaVTjowMPCAu4eeDFJRfn7+119/XVxcHKj5xBkmJyfHxsYi1wYFBc3NzbW1tbmlTrdD4rl9+/Y333yDOj99rY8CzSKhPyoqChlUXSfuIeUdi3vLk//EzMxMJFq595lbiiQ6Y4yhRHRU/po9D/4hSGVkZOTm5koM9fLy8vHxGR4erq2tjdPExMS4TCKXh7e0tOhDLYYPDQ2trq6qy8yPRb5FcLLbcB4FVg3ZKFbjlhmqgiMjIz0wPylyy/QDvjS5s7MzMTHR2tqqj/5TU1ODg4PHvZJG7XLR0dHBwcEHXwB3aHnGcm95vr6+cjMK/GeFhIS4/ZA/0dlgDCUiN5DTyohlKlMuLy8jdnR2dpZr9DFU7hvqcDi6u7tdXsK0eGlpaUl/+RF5MrkNAsKi/uDcysoKtuni4iIf/ENECmMoEbkBYigiY1lZmfyJMPrrr7+2trbW1NRsb28nJCToz87LmcTh4WH9Ic/d3V0EGrmn91lUT24iMXR0dFS/TbFLYINiBMZQIlIYQ4noEEtLS9OakJAQs0YfMuTkqbr0G5kDfyJ2LCwsrK6u7nkZr6+vL1Im5nZALrFYLBkZGViu+9aGThG2aWxsrMlkOuDSNHxiyczM3PPRBkR02TCGEtEh5ubmmpubGxsb4+Pjr1+/HhUVdbKvbLoICAjIysrCDLOzs/cbBwkVkeXTL0WnsyHPusQ21T8XQImIiMBHCx4TJaIrjKFEdKjZ2VnE0B9++CEnJwcZVJ6a/emzRQxFAP38889v37693zje3t5+mk9fHJ0Bf39/xNAHDx6oe7PryTZVDxQgosuMbwREdAh5bKDVal1bW9va2trzxuYn4OXlhdSCRKs/2Cl3IZ2amrLb7QkJCfHx8cc6hzs3N4dpMQeE5gSN2+/ZRHuSbRocHKzfpuvr67JN5UFB2CjqkZUHWFxcnNS8e/dudHT0NO4qT0QGYgwlIo8jD21/+/YtIktlZSVizbFiKLIOUktDQ0NOTs6NGzdMJhNjqOFsNltXVxe2KT7SYKMEBQUdJYbOzs42NTVhU/b29g4NDTGGEl0wjKFE5HHkoe1Pnz7d3NwMCQnJzc1NTEw8+uQSQ7///vuqqipk0OvXr/O0vuEQQ7u7u7FNsXGRQfEJQf9ETT2Jof/6179mZmZ2d3f1t5glonONMZSIDhETE3P16tXl5eXAwMCVlZXffvstICDg0KmQBZEz/uM//qO8vNxsNqvhSIRpaWm3b9+Oi4sLDQ3t6upaWFhwmdZqtSKAFhYWIq9kZWU5HwqNiIgoKCj48ssvHQ7HxsZGTU1NcHCwy+QTExOY5P79+8XFxcivzodC8SdS6dbWVnx8/Ojo6A8//OAyrTyzHiEpKSkJa62/3emJxcbGlpSUoAGxCljlJ0+e6L8fifSM4t21RCU8PDw/P//hw4dbmlevXrW0tLiMI490xzho3tTU1GN9dxMjY5Jbt25FaHp6evRP3UT6XF9fx8z9/f2zs7OdD4UeUN709DR2NnycwMZCy4yPj59g9Y9Y3vb2dmlpKcrLy8tz/lIBJjm09drb20/jYC3+4zIzM+/du4d1xz8Olot2cBkHy+3t7UXKj4qKcu/Sic4AYygRHQL5SZ4OjxCAsPLrr78epbtF4EtPT0eASElJcT6WKRdTy090rui/q6urXaZFssQkN27cSE5ORoBwzgToaxEuIyMjx8bGMDkysf4B9ygYkxcVFWHRmNz5ATOYIRIwfmLawcHB+vp6l2lRWEJCAtISYigmd+ONS00m07Vr11DbhAYrvru76zLOyMiIPmd8OjQXIjWaEY2GLfjixQskQpdxELix4n/7299SNMeNodjWaGf8xKp1dnbW1ta6jINPFNgoFRUVaFhsFOcr5Q8oD3sdqvrLX/7S39+PjTUzM3OC1Ud5GRkZUuQRy3N+BBd+P7T18KEL287tMRT/CLm5uahNUjg+pegD9OLiIhZ93MdTEXkIxlAiOgSSEzJKaWlpTU1Nd3c3Yqj++KULb2/v//N//g8C33/+5396adRLcjE1YsHs7Oy333779OnTV69euUyOETB5ZWUlEidm5Tw5Yqiklrdv3w4MDDx79kx/+PDhw4fIoFg0ooPL0i0WCzIo5oxF19XV/fjjjy7TYv7/+3//b8zhs88+c5n2EyGGItSWl5cjOiODYtH66ODQuHGhAkEKDVJYWNjU1PTPf/7z+fPnCC4u49y/fz8/Px8xFMnvuCsuOQ8hDzsGGhYrqP9ogWyHbXr9+nV8pHGZ/wHl3blzBznsr3/9K1oMO8z79+9PsPr4aPEp5WF/Q4UHt57j305Q3gEQQLH6OTk5Q0NDqLyxsbG5uflsFk10NhhDiegQqldGkEIYXVtbO/TQC8aXA0t7PupaZoguVk446o84xsfHo9dHItRPropBOEZIRSX6TFxSUoLYERAQoL8yyevfUlJSbt68qZ9/SEgIgojZbNa/JIemvvjiC7QAytvzmfUSkVdWVvBLdnY21lFfOdYOYXRDo5+DjHnjxo1jfR324PLUouX7FVarFZHOZXJMgs2BgvWNJkemd3Z20GII8fvVrLbp3bt39bevx1bGojH8gG2qLw/JWFW1XzI2sDw97HtpaWnOx5IPLU8O06Iq/L9g33P5d5Clh4WFYeM+ePAAM99v0Vg1BFb9d1SIPBljKBEdlZxWxs89n4rkDB2nxWJBt3rAOHLfUCQD/XM+Q0NDMfnBdziXA7T4qT9DipyH/v7gy5IQQ5Fs0P27DPf398eisY76SZBQ8/Ly8HN7e3u/8uQ7A/gZGBiIGpxjqHN5yOj4iWiyZ21Hab0Tl4echLBls9lcXsIq79doqOTWrVvJ/3ZADfJdC2xZhFp9eajq4O8v6stDJsMSD/4usoHl6cm+55xlDy1PDtbiJ/ac/fY9hEtsXPxfLC4u7rdoFIb5M4bS+cIYSkRHFacpLy93y9zkKUpwssmjNYgFJ5hWjobCsaaSw40HPB/oipZUQB+snckDUa9fv36spZ9ZeXpJmsrKykPHlG9cwLHmf+XfZ5YjIiLkcLKnlSdOqfXkaKj+E5Ez+YwBx1o0kedjDCUiIiMtLS2NaPz8/OTjgVse00VEno8xlIiIjIQY2t7e/urVK6TPqqqq2NhYxlCiS4IxlIiIjGS1Wvv6+mpqasLCwuRSIf2zQHd3d+VJoX5+fnte90ZE5xFjKBERGUm+D7q2tra+vr61tfX7778HBga6jLO4uBgVFfUf//EfeXl5chNQQ0olIvfifzIRERlJYmhsbOzQ0FBfX9+LFy+sVqvLOMnJyVlZWTdu3EhKSoqPj+fTWYkuBsZQIiIyUpgmJycnIiJiYGCgvb1d/yip+/fvV1ZWPnjwYM/btRLROcUYSkREHkFuzLm1tTU/P+/yUl5enjwD1pDCiOiUMIYSEZFHkJv/m81m/SMJoqOjMdzf39+QwojolDCGEhGRRwjXZGdnG10IEZ0RxlAiIiIiMgBjKBEREREZgDGUiIiIiAzAGEpEREREBmAMJSIiIiIDMIYSEZ2pjY2NNU1gYGBQUFBwcLCXl5fRRRERGYAxlIjoTE1NTfVokpOTc3Nz8/LyfHx8jC6KiMgAjKFERGcKMfTdu3fPnj0rLy8PCAjIzs5mDCWiy4kxlIjoTK2srAwNDTU1NYWFhZWVlTkcDrfMdmdnZ3V11Waz2e32kJCQ0NBQ/TOHNjc3MQJG8/X1lXGYgInIQIyhREQXAfJlt2ZjY6OgoCAvL89kMrmMs7i42KVBAM3X4BdDqiUiusIYSkR0MaytrSGDPn36dHV1dXd3NyEhYc8Y2tbW9uTJk9jYWG9v77S0NMZQIjIQYygR0UWwtbU1MzPT29u7vLxcXFy8vr6uHwdRdWJiorOzEyG1rKxse3v77OskIlIYQ4mIiIjIAIyhRERERGQAxlAiuoyWNVarNUITEhIiQ1ZXV2UEX19feSk4OHi/mWxubspU+MXlJUwVHh6Oyf38/E5c3srKistwHx8fVbAM2d7exmgYeWBgYGpqan19fWtra3Z2tr+/PygoSEZ2OBwyQ4wzNzeHSdbW1uT2pRsbGzIO1tdlWWgcmcrlWn4vLy+MH645waoRESmMoUR06SBXDQ8Pd3R09Pb2Xr16taioKD09/ePHjxiC9CbjIEde1aSmpu43H+S/Dx8+tLe3I/a5vJScnIzZYvITxFBVXldXl8tLgYGBUnBGRoYMQe5EmkQNHzSLi4tIlp2dnZjJ2NiYjLy7u4u5yTiYp81mQ5Rsbm5Gei4sLJTV1MfQiYkJmQqTOw/HtDJbxlAi+kSMoUR06SCijYyMvHr1qqamZm1tLSYmxmKxIIZWV1djoIwTHR29vb0dHx9/cAxFUHv06NHAwIDLSyUlJQigWVlZJ8hqqrzffvvN5SXMbWtry2QyucTQ33///d27d6urq1ar1W63I4ZiDqOjo4iMKSkpOzs7SJO//vorxpR7iyKAtrS0IHNPT08j2mZnZ6vDq8rk5GRDQwOmwhKdh3t7e2MOUVFR+fn5x101IiJnjKFEdBkhriFm9fX1dXV1JScnBwQE4E/kzrCwMBkB4QzjIF/ipSiNCmrIcIsaJNeFhQUfHx81lYIoOTs7++HDh+XlZZlcf7hRb2lpCbPFPMfGxhD+9LMNCgpCVYODg8HBwTJbBE1/f3/8GRoaKmfbMRqGhGhQvLcGv8gQzBZ/omYMwSSYEHHZ+aH2yNZSxtDQEOYmM3GuAZMj+w4PDyPIooDIyMiIiIhjNj8R0R8YQ4no8trd3UXYqq2tnZiYQHTLy8srKiqSl5Ajkdja29v7+/tLSkqKi4tVDF1dXe3s7Gxra5uZmUFEq6qqQjLTzxlZ7dmzZ6mpqcWao9yhc3R0FLPFQlFMWlpadna2ywhSFdKtqiomJiYnJ8dutyckJLS2tmJyuX09XsK6YI3Cw8Pxqpx2T0lJadMg4GIEzCE/Px9LQeZWi5iensYImBWWZTab//73v+vrRA1oN6RwqYExlIhOhjGUiC4v5DPEKTls+UBz/fp1eWlpaenFixcvX75ELEMgS0pKQoaTlySGPnnyBEETk9y+fVt/4r6rq+uFBmkyKCgoNzf3KDF0bGysrq7u0aNHn3/++WeffXbnzh2XEaxWq1Q1MjKCpJuYmGixWDDz5ORkOU2POWAcxNCvv/4a0VOOgKJ+/I4RMD4SJCIswmtpaek333yDyoODg52Pd8oj73/66SfkS2kTl6+3otGkhrdv3yLyxsbGIuwes+GJiP7AGEpEl5eXl1dgYGBkZKTZbEbQRKRDapSXkE0RvxYXF0dHRxcWFpyvhffx8UG2Q5Lb2dnBVEhyaioF4RUxcXJyEvNfWVlxucpnPzabDcsdHh5eW1tDbNXPFvX4+/sjIktVSIEoRi5aR76MiorCq3KNPxInalMTYjhWExFTLopH7oyOjsb6xsfHuywC2Xpubg4xNz09HcUjfLuclMe6IFgji6NOjLnnffKJiI6CMZSILi95oGVpaWlJSUlubq4+k+0JAbGgoABhzm635+Tk8IJxIqKTYQwlostLYujdu3cfPnwYHBwcFBR0lKkkhqanpzscjqNPRURELhhDiejy8vLyQo6MiYlJTEw8+lS+vr5hmrW1tbm5ub6+Prk+3VlnZ+f4+LjLrY6ObnZ2tqurKzY21mW4XLy/vLx8stkey8LCQm9vb11dnf67oT09PfPz82dQAxFdbIyhREQnJLevb2pqmp6ednlpamqqv79fH0+PQu4b+vr168nJSZeXNjY2kHpnZmZOWPFxYOlv375dXFz08fFxHo4YihoQss+gBiK62BhDiYhOyGq1IoY+evQIsczlpe3t7c3NTaTGE8xWYiii7bt371xeQgTc1ERGRp6s5qObmJhYWFhoaWlxvquowHrpn19KRHRcjKFERMezvr6OjDgzMzM0NGSz2ZKSklyuJb+iHSiVcU4wf3lou8lkiouL228cxNCcnJxTvWFnWFiY2WxGGfq7ogo/P7+CgoKYmJjTq4GILjbGUCKi47FarZ2dne/fv5+fn4+Kirp9+7bz7d8FEmpjYyPGPNkiUlJSrl+/XlJSst8IQUFBmZmZB+TUT5eYmHjt2jWUsd/zn3x8fFDDsb5WS0TkjDGUiOh4VldXu7q6njx5srm5+c0331RVVWVlZbmMg5Aqp+xPMH95EDxm+7e//e2Acfz9/V0uHnKvhISEysrKv//971jQfjX4aU6vBiK62BhDiejystvtExMTTU1NgYGB8ZqjnGLGVBsbG0iZ29vb+DMkJER9U3NlZWVKgwAqD6k/WWHyUHj9F0AxQ5k/ojBiotlsjoqKOtkiDoV8GRwcHBER4fKVA4fDITXMzc1Jo53qQVkiusAYQ4no8pKHeXp5eSEy3rhxo6Ki4hO/6bi4uNjW1vb27dvu7u7BwcGTXSl/AMTQgYGBd+/ejY+PS8GnF0P3gxg6PDzc2NjY3t4uNTCGEtHJMIYS0eW1u7uLGDo2Ntba2oowarFYCgsLP2WGEkN/+eUXZNAdjbtKFfJE+BcvXnR1dfn6+qanp2dnZ7t3EYdS95N6+vQpfk9KSiouLj7jGojoYmAMJaLLy9vbOz4+PiEhITk5OTg4uK+vTz0hfWNjY3V1NTc3F1GvoKDA+aBjSEgIwt+9e/eWlpauaF8DHRgYkJfm5uaQzEpKSjD+5OTkxMTEsepBJeXl5Vi02WxGOP75559dRtjc3FxYWEBcjo6ORg17Xilvs9mwIjU1NRgzURMaGuoyDuJyZ2fnb7/9lpWVhRGwXHXmPS4uDrFyeXnZZDJhdR4/fuxy31CsINYrNjb2/v37+fn5vFKeiE6MMZSILi95mGdlZWVRUdHU1FRPT09dXZ285Ofnh4SKQIaUlpqa6hy2kOoQvxBbkRSnp6dfv36N5CcvhYWFYaoHDx6Mj4/Lvd+PVQ/S8O3bt5OSklDM0NAQ5uAygq+vL+ZfWFiI4IjK9Y9ZuvLvK6jW1tZQHlYtVOMyzvz8fEtLC8orLS3FOAi1KoZi/hUVFcigiNEoo62tzW63u0yOcbD0W7du4SevlCeiE2MMJaLLy8fHR54pf+/eve+++66mpub333+Xl5Dw/tf/+l9ffvllVVWVt0ZNJc+Uz8vL6+7u/v777xFDkV/lJaS6v//974ihCHBLS0utra3HqsdisSCD3rhxA8XU19frj4ZGRkaiqs8///z+/fsuVSmIoZ2dnahtZGREErM+KSKGIoOivIWFBWRQlK1eMpvNcXFx165de/LkCTIoVtDlTvVoNNRw8+bNb775Zr8aiIiOgjGUiC41pChfX9+goCDkUUQrdQfQ8PDw4uJik8mkvyGRl5eXjyYqKgph9LPPPlM3bMrIyMjJycG0drsd2Q6JEKkOA50vNsc8y8rK1tbWCgsLU1JSnGOcpDrMGcMrKiocDofLokNCQkpKSuLj4/VVBQcHZ2dnIwFjWhmSnJyMIc6HQpFisdCvv/56dnZWhiCkpqamOt+SSSVLhFfUabPZXL7hilfLy8sRl/e7kRMR0RExhhIR/XGyG2ER2S43N1eGIDgizx18DTjiZlFREX6urKzIEARTTIWwiCiJGBoTE4PfLRaL8/3tESJv3LiBn8ijeMnlm5cC0RBpLz093WU4kh/mjwn1kyCGIlMidC4sLKjyMDJ+qnGio6ORYvFTfYsAK+hSnoIYWllZiZ+7u7vOw+W2psi4B7QMEdFRMIYSEf3/GArHmgoJr1CjfwnpExnU+WS3IvfarKio2G+2kvPUQc0jwhLzNAeME6U54OFMzhI0SKLHKoOI6OgYQ4mIiIjIAIyhRERERGQAxlAiIiIiMgBjKBEREREZgDGUiIiIiAzAGEpEl5GPj09AQEBwcLC/v/+et0wiIqLTxhhKRJeOl5dXampqVVVVeHj4jRs3EhISjK6IiOgyYgwlossoJSXF398/NzcXGTQ+Pt7ocoiILiPGUCK6dLy8vOTe7EYXQkR0qTGGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQogtrd3d3aWlpbGysr6/P6FqIyINMTExYrVaHw2F0IXTZMYYSXVibm5v9/f3Pnz8fGBgwuhYi8iA9PT1DQ0N2u93oQuiyYwwlurAQQ/v6+mZmZkJCQoyuhYg8yMrKyvLyMmMoGY4xlOii8fHxiYqKSk1NzcnJkSG7u7ufMsO1tbUVzc7OjgxBrg0PD4+IiPD29v7Ucg2CPhhrZLVa5U+sSLgmNDTU2MIuBuwqss9sbW1hP0HDBgUFGV0U/SlEk5iYaLFYsHWMLocuL8ZQoovGz88vMzPzs88+QxJ1ywxHRkY+aFZXV2VIfHx8YWFhUVGRv7+/WxZxxhwOB1ano6Oju7tbhvj6+mZkZGCl0HTG1nYx2Gw2aeGlpSV8HMKukpSUZHRRtIf8/PyUlBQvLy+jC6FLijGU6KJBNESWiouLu3Hjhltm2NTUtL293d/fr2Ko2WyuqKj461//ek5P99vt9kePHiEhucTQ+/fvV1VVGVvbxbCwsID9cHp6enNzMzc39+HDh8XFxUYXRXsI0xhdBV1ejKFEF423t3ekxl0zXF9fHxsbGx8fn5+flyFpaWnh4eE7OzsIGTIkQoOFnovDKoihw8PDWKnZ2VkZEhAQkJCQEBgYqNYIwVSa8ZxGbWMhhqKFsc8g4uBDCxrT4XBIe/LsPBEpjKFEdIjY2NiysjIENZvNJkN2d3cRSX/88Uc1Tn5+/tWrV5FEz0UMRZGpqal37tyJi4tTA5Gqe3p6Ojs75U+kz6saxtATQKDPzs5Gk46MjOBnc3PzwMBAcXEx2pMxlIgUxlAiOgSyGqIDUoW61Kmpqammpubly5fr6+sy5OHDh+Hh4UVFRcaVeQyIoSkpKdHR0aWlpTIEK1JdXY2Vev/+vQzBq9vb2/Hx8WlpaUbVeX7hQwt2mISEhPHxcewnaFi5Giw5OTkxMdHo6ojIUzCGEtEhAjWxsbFqyNzcnNlsRlBbW1uTITs7OwgcyHBy7TxyXlRUFEZw43cD3CtUo/7EigwMDJhMJpQtQ0JCQlZXVzFQHd9FtJKVCg4ONqDic8XHx0e+p+Hn55eUlIRPMthDlpaWent7HQ6HNCMPixIRYygRHVt8fPyNGzfCw8O3trZkyObm5sTExMePH+VPRLcSjcfGUBdIS3KJkrq9gN1u39jYaGtrU8dHEZ5kpRhDjw5tlZubi1/GxsbQnm/fvkUSlWZkDCUixlAiOjaz2RwWFlZYWKhuf11bW/u7RoZ4e3uvr6/Hxsael9P0cqU84nVlZaUMWVpawuq8e/eutbVVhiQlJcnZ/OTkZOMqPWeQNRFDLRbL8PAw2vPVq1f46ILdA3E/ISHB6OqIyGCMoUR0bHKa3nmI5d8khiKuydXodXV1MoKPj09MTAyCqWceH0XBckNvNQQ5G3ETa7SwsCBDoqKiVldXu7q6tre3YzU8LHoobHe5JRD2BzQmmhTtabVaOzs7Nzc3ZZfgYVGiS4sxlIjcICkp6ebNm0gV6viozWYbGhpSF577+/uXaTwzhurJRTb4Rc4pX9G+/4qVamxs7O3tlXVhDD06RPy8vDyk0omJCaT5hoYG1YyMoUSXFmMoEbkBYigyqLrwHGH0qebFixcyBIkNMS4hIQFZxLAqj0NiqMViUd9/nZycfPLkCWLoxsaGr69veno6L/o+OsTQ/Px8NNrAwAB2jPr6+iv/ftSC2Ww2ujoiMgZjKBG5QYAmIiJC/pQzsBkZGRMTEzLEz88PP50vPMcQk8kUFxenpvIo3t7ewRo1RO42mpWVNTc3t7a21tHRoe5+HxoaGqfhgb39+Pj4yNce1tfXpRmtVuvq6mpra+vKygpbj+hyYgwlIveTS3nu3Lmjjhc6HI7l5eXe3t6mpiYZguh27dq18vJyz4yheoikeXl5SM9jY2NYl/r6evXIpaSkpHINg9ShwsLCCgoK/P398REFAbSurg57BZoOOwNbj+iyYQwlIveTGBofH19RUSFD1tfXf/3117dv37569UqGxMTEyGhZWVnGVXoM8u3GjIyMgYEBrEtDQ0NPT4+8VFhYGBgYmJOTYzKZjC3S8+HjB2JoZmYm0uejR49ev34tV7zl5uY6P9SKiC4DxlAiOhVyml79ubGxgcSZn5+vnggaHBzscDi6u7tXV1dlSFBQkNlsRpILDw83oOLDeHt7B2kQrxFGi4qK1Cl75Ces1/v379WdUyMiIswa50agK9rZeZdmxEcUufZrdnZWGs3lPgxEdFExhhLRWZBrepA7kTxkyM7OzsLCQltbm7qpU3R0dEVFxfXr1z0zhiqhoaHI04hK8/PzMgRBCutSU1OjTtNjZWVFGEP3g8YpLCxEHp2YmJDWQwDFDoDmZQwluiQYQ4noLPj4+CCAWiwWpE8Zggz3008/vXz58u3btzIEr8ql0+pRRp5JTivn5OTs7u7KkK6uLqxLbW3t4OCgDEEGlTv8n5cbVJ09iaFoxg8fPqD1EEPRVtK2MTExRldHRGeBMZSIzoKXl5efRg1xOBzp6ellZWWInjJEbnLe2tqqrq9HKEnQOD//3XDe3t4uXzkwmUyIUxUVFUlJSTLEbDavrKy8fv1a3RIf0UrWxbkRLjPVjKr15M6sdXV1+EAibcXDokQXG2MoERlDbsyJTFZYWChDNjY2ZmZmGhsbrVarDEEQqaysRJLzqBiqFxkZefXqVcRoRE8Zgl+wLr/99ps6TZ+fn3/jxg2EUcZQF6r1xsfH0WgvXrxAmkdbRUVFMYYSXWyMoURkDImhGRkZ6sFLo6Oj33//PWJoS0uLDMnNzUUGxU8Pv1G8BKmCggKHwyFDsBb/+te/nj17Njk5KUPu378fHR1dVlZmXJkeSrVec3MzGu358+f4+IGBxcXF/EoD0cXGGEpExvDy8vLRqCHIHAimt2/fVo/ViYiI2NnZefv2bW9vrxoHkTQpKcmjHqSJdfHVqCEmk6mwsHBBI0MQrfA7gmlycrKsgvP4l5lqvbi4uPz8fOR1DLRarS9fvrRYLEka9c0NIrpI+CZIRJ4CyRIpBD+vXbsmQ1ZXVycnJ+vq6tRNndLS0m7evIkw6lExVC8mJqakpCQqKmptbU2GzM/PY11++eWXvLw8rAKiNmOoCzQXGg0bd3x8fGJiApFdNjcakzGU6ELimyAReQq5P3xubq46td3T0/Ptt98ihnZ1dcmQsrKyiIiIq1evevitzqOjoyVUqSHV1dVYC8TQ6elpk8l0/fp1A8vzTGgxOUHf0NDQ39+PGJqZmYkMym8yEF1UjKFE5EG8NOpPJM6CgoKHDx8insoQJJXNzU1EusbGRhkSGxubnJxssVg86g6dLityRTtNjzi1trYWFhY2Nzf3888/q6Ohct4Zq+AyyWWjGg3bFAl+dXUVTbSysvL06VM0jmxlXuBFdJEwhhKR55JbS+KnugJ9aWlpdHT0xYsX6mQ3EuqtW7fi4uI8KobqIYZeu3YNP0c1LS0t6haqFRUVWAXErEseQ5WYmJjS0lL8lLZ6/PhxdnY2mshsNjOGEl0kjKFE5LnCwsIKNGpIU1PTx48fa2trh4aGZEhVVRUyaFlZGUaWIRLmPC3SmTTl5eXPnj1rbW395Zdf1BdekUcTExMrKyvVyJ65CmcmRlNSUoIN3dXVJTccQAZFjpfvBF/aliG6YBhDieg8iYqKKi4uXltbm52dlSHR0dFWq/XJkyfqKpaEhASLxZKSkuKZR87kkZWInuqWovHx8YhZ3377rUqfKZrk5GRDKzUePmAguKOhAgICFhcXf/7555R/4wVeRBcA/42J6DyR635iYmLUSfmZmZmhoaHHjx9vbGzIkNLS0tu3bycmJnpmDEXoRAxFeeqk/MjICFahrq5Ors1CDL1z546Pjw9jqMRQBPfh4eHBwcHm5uaCgoKqqiq0HmMo0QXAf2MiOk8iNc6n6ZHeenp6Xr9+rY6Pbm1tJSQklJWVqVO3iHTe3t7O9yg1kJydd776+6effmpqanr69Kk8pB6lBgcHp6amOl9oL/dYxUsGVGwcOTtfXFz88uXLDx8+VFdXr66uIoOi9WSDesg2JaKTYQwlovMtNjYWoQTRUz0CNDo6emFh4ccff1QZJSUlJU3jmd8pTEpKunnzJnKVeqCU2WweGhr6xz/+IX/6+flJ/R7+NKnTIxd4IaYHBgbOz8//8MMPiOnSJkyiROcXYygRnW9y3jYhIUF91XJ0dLS/v7++vn57e1uGIOQhgCK4eHIMRXlyUh4/UX9fX9/z589lBGSve/fu4eeljaHI5devX0dDffz4ES2DjVtaWnpF+4DBGEp0fjGGEtH5FqVxPk2P9NbR0fH27Vt1Kbqc415ZWVGRxc/Pz+XxmwYyayRXgd1u//777xsaGmpra2VISEhIbGxsZmZmTk4Oakbxly17ydn5oqIibNz29nY0jnyuwDbFxpU2MbpGIjo2j3gLJiJyI7kUHb+oi5aQUycnJ//5z3/Kn0gwGRrkGMOq3J9cKV9VVYX0KUO8vb0Rwnp6ehYXF6XyhIQEY4s0itq4QUFB09PTyOvpGrSJZx7qJqIDMIYS0UUTHx9//fp1i8WiLkXv7+/v7u5+/vy5uhT9s88+CwgI8MwYekU714zycnJy5M/t7e1uzevXr1F5aGjopY2hcp8BtE9vby8apLq6urKy0sfHBzHU6NKI6NgYQ4noopETuM6n6ZFHW1pampub1aXoSDMILgsLCzICgqm/xhPO7aKYeI0aYrPZUGpdXR3WIjExMSsrCyFbXsK6SOUe8gWD06Y2LqJ5a2srGiQiIgKbcn5+PjAwUJrC6BqJ6KguxdsWEV1yiG43b95EUJOjoVe0Gz+5XIqObJeZmaninUdB5Uha9+/fT0hIQOrq7OwcHh6Wl0JCQqRys9lsbJFnTJ47hZYJDg4eHx//9ttv0QhoCh4WJTpHGEOJ6OJLSkry9/dHQFGXon/QdHd3ywhBQUEPHjwIDQ312Bianp6O8rKzszs6OlC5epZpbGwsKkeqvmwxFIkcMRTNglCOBnn27BliekBAAGMo0TnCGEpEF1+sJj8/X/602+1LS0vv37/v6uqSIXIpPUKe88nuQI0nnKb38fFJ0KDI6enplZUVVbnJZEpLS0PlMTExamSp/GKfppez83l5eTabrbW1FZ8okpOTMzMz0T6y+oikRtdIRIe4yG9SRER7knv93LlzJyIiQg0JDQ1FlFEnuxFMke1ycnI86lad8uWBBw8eqLiM0IlSm5ubOzs7ZUhkZCTKRvFI3sZVenaQPm/duoXciXYYGRn5r//6L9lwPCxK5PkYQ4no0pE7IiG1qOOjW1tbLS0tra2tvb29MgRh7osvvoiKivKoGOrv75+ZmYnaysvLZcjy8jLKRgxFApMhiGWbm5txcXGXJIYmJSUFBAQgerZqOjo6sOFCQkIYQ4k8H2MoEV1Gcppe/Wmz2aamphobG0dHR2WI1Wod1URHR8sQX1/foKAghFcDr8VGDS4X0aPs8fHx9fV1VbnD4cDvY2Nj6qy0n59fsOZCnqaP1uCXhYUFfJYY/Te0gKx1YGCg0TUS0d4u4FsSEdFxOV+KLkPku6Ht7e3qMqaIiIhcjUddDIRknJOT88UXX2RnZ8sQH019fT1StQyJi4tD2Xl5eZGRkYYVevosFsvt27fDwsKw4QYHB2dmZrDKPDtP5MkYQ4mI/jheiLCClKaeqLm6uvr+/fumpqb+/n4ZEh8fv7GxYTKZPC2GImIiaKonl87OzqLyhoaG8fFxGZKVlbW7u5uUlHSxY2hycnJISAhaQzYcPj98+eWXSKWMoUQeizGUiOiPY58up+kXFhZGR0ftdvv8/LwM8fX1nZycHB4eVifl8QtyT2hoqIFX06MGeSS9GoIKBwcHt7a2VOURERETExMYjtWUgi/w2fm0tLTp6enW1las/tTUFDbi0NCQrDUiu9E1EtF/cwHfiYiIPp1c9fL555+rY2leXl6Im42NjU1NTTJEbgIF6mZJngB5q6CgYHd3t6SkRIYgfeLPmpqa/v7+vLw8FKxuEXDxqNsgYKNge/X19SGCY5Wx4unp6UZXR0T/DWMoEdEeJIY6n+yen59vaGh49+6dunU8Yo3dbk9KSvLAGJqYmLi+vi5DRkdHUXZdXZ3UiZR2sWNoSkpKeHg4cudbDcL3119/HRkZyRhK5GkYQ4mI9uDr6+tymn5iYmJwcNDb21vFu5WVlampqY8fP25tbcmQwMDAMI2Bp+kRoF1O0wcFBQ0MDDgcjuXl5cnJSfyOytVLqBahzcfHx6B63QwxNEqDID42NoYtsra2Njs7Ozw8jA8VsnWCg4ONLpOI/sAYSkR0JMgueXl5Ozs7RUVFzsNfv36tfk9ISCgoKCgsLPSoi4FQzNWrV5HPFhYWkJifP3+uXkpJSZGCQ0JCDKzwNCBYp6en3717Nz4+Huve09MzOjqKNcX6pqWlGV0dEf2BMZSI6EgQ1BBDnU92j4+Pv3nzBjFUXZOen5/v7e2NlONRMTQiIgIxFImzu7sbBdfV1c3NzclL5eXl8mSmCxlDsSGio6OxUbDKWPGhoSFsu9jYWMZQIg/BGEpEdCSIay6n6eVkN34iesqQzc3N6enpnp6ehYUFGYJ4F6Ex8OJ0eca6yWTa3t7u7+8PCAhQBSOWTU5OdnV1hYeHy5DQ0FBkaBSsxjmnvLy8IjUxMTHDw8NYQYfDsbi4ODg4GBYWJhvl4oVvovOFMZSI6ISQbAoLCxF31MFFBJ2tra2XL1/iFxmSkpJyVeMJ90iKiooqKSlBnl5aWpIhqHN1dfXx48dqnKysrKKiIhRs4MOi3EtuCnvv3r3k5OTd3d3Ozk4kUawgVpMxlMhYxr8tEhGdU4ihiDKpqanqEqWBgYGampra2trp6WkZcu3atcDAwOzsbE9IPNHR0cXFxchk29vbMuTDhw+oFjUvLy/LkDt37gQHB+fn51+YGCqPyIqLi8NKydYZHx9HC8THx2PbGV0d0aXGGEpEdEIIauqB5mJ3d7evry8yMnJtbU2G2O12RNKOjo6wsDAZgvAql3Kf/VnvAI3z9wpsNpsUjDplCPLZ5ORka2ureiQ9XpWCz7had0E7h2uwCfA5ISYmZm5ubmVlBb9jC8qqecKHBKJLiDGUiMhtEGiKi4v9/PzUwcWdnR2r1fr48WN1mj47OxvjlJSUeMLhRkTSsrKyoKAg5FEZgoKR0n744Qc1TkFBAQpGGPXy8jKoTPdAg2dlZWEF09PTt7a22tra+vv7sSGwdoyhRIZgDCUichuJoZmZmcg6MqS9vf3ly5fPnz9XX8e8e/duaGhoYWGhJ8TQuLi44ODg3Nzc3d1dGdLY2PhCo24I8NVXXyGDYr0uQAzFpomPj5+amsIWwXaZnZ3Fx4OkpCSLxWJ0dUSXEWMoEZHb+Gucz18vLy8nJiYi+qhz3N7e3ohBSHtqCMaPiYmJjo4++5wnp+mdv1cwPT2NWGY2m1UMtdvtY2Njb9++jdE4j3y+oOXl9vVY5eTk5ISEhM3NzdXV1d7eXrwqq8bDokRniTGUiOgUxcbGlpeXI9yob4si+szNzf3444/qNH1RUVFJSQnCqCccbkRirqioCA8PV9ddbWxsTExMDAwMlGjObwxV5EmtaP+RkRGk7ebmZiTRsrIyrB1jKNFZYgwlIjpFcXFxoaGheXl56hqghoaG33777dmzZ+pw49LSUmRkJDKQcWX+CTE0IiKisLBQpeTq6mop2GazxcTEeEidnyIwMDAnJyc5OXl8fBzr9fr165WVFW9v75SUFAw0ujqiS4QxlIjoFMlpegQ7NQRBJzU1NT09XcVQX19f5KG6ujo5Goqfcp98ZL6zL1hO0zs/BcpisUjBCGqjo6OvXr2S4fhT6jx3x0dReYjminZj17S0tMnJybW1ta6urq2tLVkpHhYlOgOMoUREZ0rOeiPnqbPeNpsNMUi+oXhFi6Hl5eVlZWWGxFC9pKSkmzdvohir1ToyMtLZ2SnDkZ6lznMXQ5Xg4OCcnByk0rGxMazdu3fvenp6ZKUYQ4nOAGMoEdGZQgyVC+rVWe/ff//9yZMnjx49khP3SEWbm5smkwnjGFrp/4cYKt9wRZGPHz9++vSpDPf390eSNpvNhYWFxlZ4YkFBQXl5eenp6UNDQ1g1xNCNjQ156lJiYqLR1RFdfIyhRERnSk7Tq7vZX9HOemdnZ4+NjUkM9fLywgjDw8PPnz+XEXx8fJD2EEwNOe4op+lVnZOTk6oqX1/fwcFBVScCnElzXu51j8QfpMFng7S0NETS+fn59fX11tbWlZUVrAiaPTg42OgyiS4sxlAiIoPJWe+4uDh1GdPi4iLiXUtLi/yJFHj9+vVr164Ze/obMfT27dtIbPKnw+FAnf39/U1NTTIEiU3qPC8xVAkJCUEGRfrHhwGsVH19fU9PD1YECZUxlOj0MIYSERkMMdRkMpWXl8ufCKM///xzc3OzOv2NkCR3WS8oKDCuzD9iqNlsrqiokD+3trZQZ2NjozoaKhc2YbTc3FyjijwZtHB+fn5mZubAwABWCjH0inZBPVZExW4icjvGUCIig/lp1FE3JM6UlJTCwkL1RFC86u/v39/fv729LUPwZ0JCAkLhWR53lDrVnyhG6lQPAg0ICPD19e3p6VE3SUWSi9c43yvAA3l7e8t3D+Li4jIyMkpLS1dWVjY2NhCyZ2dnZRV4WJTI7RhDiYg8DuJdVVWVuoel3W5HGEK8a2hokCFhYWE3btyoqKgw8PQ3oltaWhpCM37KEHkefWdn55s3b2RIZGSk1OnhMVRBwyJYI3GOj4+jzV+/fo1mv379emhoKGMokdsxhhIReRYvLy/E0MTExJs3b8oQm832ww8/IBK9fPlShsTFxfn6+qanp2dnZxtVp4+PDwIosrJ6Hv3y8vK//vWv6upqlCpDsBb+/v4ZGqPqPBbEzYKCgpycnO7ubmnzwMBABFAMNJlMRldHdNEwhhIReRxfjfoTgS81NbW8vFw97TMoKMjPz+/Dhw/z8/MyBFEpISEBse8sjzu61OlwOJCMr127hugpQ0JCQry9vdvb261WK2pDhR5+WNRbg7aNiYlBGMUngfX19Y2Njfr6+vHx8UQNGt/oMokuCMZQIiJPh6iXkZGBMKqOfW5tbU1PT7e1tdXU1MgQxCZkJiQkA3Me0mdmZiaqzc/PlyGbm5tTU1PNzc0dHR2VlZWBgYEeHkMV1FlUVBQaGor0iVWorq42m81YBQxnDCVyF8ZQIiJPJzE0LS1N3dFpdnb2u+++QwxV38JMSUlBPEJOVd/UPHuIoVlZWShV1TkxMYE6m5qaUDDKy8nJMbC8YwkPDy8sLESeRiP/3//7fxH3IyMjkUGvXr1qdGlEFwdjKBHROSAni9WfoaGhCHxVVVXqgZ8hISE+Pj4IfENDQzIkLCwsWeN8q/wzrhNhDtHz7t27yKMY/v79+8HBQQPLOzovLy8fDVq4oKBgcXFxa2trfX29urraYrFI5YGBgUaXSXS+MYYSEZ0/CEDZ2dn4qR74uba2Nj4+3tjYuLS0JEOSkpJu3bqFIGhgzpMjoPg5Ojo6NjbmaeUdRWRk5NWrV/FTVuHFixfyuAHEU8ZQok/EGEpEdP4EBARka9SQ4eHhf/zjH8h579+/lyH5+flyZhmxyaAy/4ihuZqhoSGU9+7dO/XIJU8o7ygiNUiiaNiPHz8+f/48ISEhOjq6rKzs3D0sisjTMIYSEV0E8jjKL7/8MisrS4bIUcbXr1+3tbXJEIQniwYjG1LeV199paKzR5V3FAidJSUlNpvNbrevra09e/ZMqk1JScGnAqOrIzqXGEOJiC6C4OBg5Dxku8XFRRmysrIyPDyMnIdfZEhGRoZ8ndSQGJqfn4/y1El5jyrvKJCSi4uL8XNkZASVI4ampaWhYLPZzBhKdDKMoUREFwFiaI5GDenu7h4dHX3//j1+kSFlZWVxcXHyTUcZ4uXl5XJR0eUs7yjk7HxRUVFDQ0NfX19tbe34+DgyaGlpKdbOc+okOkcYQ4mILqbw8HBkptXV1ZKSEjVkc3PzxYsX6toak8mUqjn7q208vLwDxMTEIHpubGwgJVut1kePHqWkpEid6r79RHQUjKFERBeTXAAUFRWFqCRD5ubm5CIbhD8ZUlBQcOfOnfj4eENiqCeXdwCJoYjIQ0NDKLilpSUnJwd1ypNLja6O6DxhDCUiuphCQ0NdzoM3NzcPDAzg58jIiAxB4EN4Ki4u9vPzkyFys0znR3QaWJ7NZkN5JSUliKFSmHqcqYGiNMjQr1+/7u7ubmhoWFlZSUpKQp1ot7NpPaKLgf8qRESXhVzrvbm5qZ5EHx4ebrVaHz9+rGIo4lRaWlp6eroaYnh5ctY7XeNRhxvj4uLKy8t3dnYQPRcXF3/55RdVJ5Mo0VHw/4SI6LKQa71NJtP6+roMmZiY6O3tff/+vRqCXOVwOCwWy9nH0APKy8nJsdvtycnJHhhDExISBgYG+vr63r59W1RUhOFoPcZQoqPg/wkR0WURrsnNzVVD6uvre3p6Ojo6ZmdnZQjSZ0pKytWrVzc3N9UQOIP8py/vzZs33d3d7e3tKAZVIeRtb2+fcVUHkLPz+fn5CJ1dXV0tLS1I8FJnRESE4eUReT7GUCKiyys2Nra8vNxut6vrhMLCwubn53/44Qd1+6H09PSMjIzMzMyz/16mHG5Eefh9cXHx559/9vHxkZdSU1OlKjXEQGaz+dq1a8igyKNzc3NoPTRapoZ3cSI6AGMoEdHlhZxXVlaWlJS0tbUlQz5+/NjV1VVbW6uGVFVVIV0hUZ19eZKSk5OTe3t7UdXr16/VMdrKykokPKQ9T4ihJpPp+vXrFosFdXZ2dtbU1CCVojCUxxhKdADGUCKiyytC43y5OmLThw8furu7bTabDEHGQgadmZlRiSrg3067PLljPMpzOById319fcvLy/JSdHS0VKVOfJ9ZVXpydj43N3d3d7ejowOtFxYWlpGRgfJCQ0ONqorI8zGGEhHRn+Lj4ysqKnx8fNRxRwSpiYmJb7/9Vv5EGM3SIGadWVVms/n69etYtLp6KSQkZHp6+vvvv1dfFUBJ2dnZhhy1VVTr+fn5obzvvvsO9UhhnnCrKSJPwxhKRER/QuBDkEpLS9vd3ZUhnZ2d7RqHw3FFi6Gff/55UFDQWcZQOeudmpq6s7MjQ3p6elDSs2fPVJ0PHjwIDAw0PIbeuHEjPT39w4cPUt7t27f9/f2RRBlDifQYQ4mI6E9yfjk7O1sNsdlsbW1tHz9+lEuFEEMR9UZHRycmJmQEBKwgzemdepaz8whzasjW1hZy3tDQkPoOK8KfvqpAzSlVpadab21tDeUNDg4mJiaiqsnJyeDgYFSCks6sGCLPxxhKREQHSUpKunnzJiKUHA0FJCrkv3/84x/yp7+/vzwPKTU19cyqSkhIqKysxKLV0VBUhcCnqvL19ZWqEE/PrCoF6RONhlyOCpGM/+u//kuKcc73RMQYSkREB0lOTg4KCpLrhPAnfjY3N7e0tLS3t8sIePXhw4fh4eFnGUOR8xDysrKy5BgttGhaW1vlT+Q/VBUWFmZIDEVKlvJQD6pCiz148AANxRhK5Iwx9E+bm5tra2s2m019tiYioivaveLj4+Pld7xD7uzsDA8P19fXy5CQkBCTyZSSkqLGORu+vr5ms1n92dTUNDo6qqpCCoyLi7NYLElJSWdZlb68sbGxhoaG6OhoBHpjv7pKRxcYGBgcHIx9m7fcOlWMoX+am5vr6enp7u5eXV01uhYiIg/lcDhaW1vHx8fVkO3t7Y8fP1ZXV6vvZRqivb0dMVT9ibg8NDRUW1s7MzNjYFUfPnwYGRlBo6G2uro69ZgA8nD4AJOn4dd5TxVj6J8QQ/Fh+unTp/Pz80bXQkTkoZCoFhcXl5aW1JCdnR3EUAzEW6hxdf3xmCVQf9rtdsRQ1NnS0mJcUVdQAKqSGIoM2tnZaWAxdHTl5eXyAALG0FPFGPonm802NjaGz9NTU1NG1+LpfH19/TWe8PwSossMYWtzc3NrawtBJzg4GF3m2TzHPFTjPGRDcwaLPoC+KjSOsUdDr2hfWoAr2mFjw4sR2FJra2vr6+vqsjNygR2ptLRU3SCMTgljKJ1EYGBgnOYs74RCRHoIoLOa3d3dlJSUtLS06Ohoo4siTzc2NjY8PDw0NMQYSsZiDKWTCAoKMpvNWVlZ4eHhRtdCdKnZbDYfH5/V1dWdnR3EULnHu9FFkadrbW3d3NwcGRlR9xkgMgRjKJ2Er69vaGhobGxsZGSk0bUQXWpWq3V6etrPz++Kdo/3pKSks3y4EZ1T2GfwHs4HO5HhGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCG0klsbm4uLCyMjIzgp9G1EF1qa2tr8/Pz+Jfc2dmZmprq6uqyWq1GF0Werr+/H7uNw+EwuhC67BhD6SQ2Njamp6e3trb8/f2NroXoUtve3l5cXEQYtdvt+GSIP3t7e40uijzdzMwMPrRgnzG6ELrsGEPpJNbX1zc3N2dnZ728vIyuhehSczgcCBO7u7v4HTF0fHzc29vb6KLI0+1qGEPJcIyhf4qKiiooKPjiiy8WFxeNroWIiIgMU1RUlJqayjN+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" name="Object6" align="left" width="305" height="132" border="0"><br clear="left"><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>Figure
3. First and second realizations of the foreground palette</b></span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
result of this peculiarity is that a palette is not guaranteed to be
set into the system palette starting at index 10 (first index after
static color section). This feature of the Palette Manager allows two
applications with small palettes to share the system palette without
causing the system palette to change after the initial realization.
One way for an application to ensure that its realization begins at
the first index of the nonstatic section is to prefill the system
palette. This can be done easily with a sufficiently large
PC_NOCOLLAPSE palette of all black entries.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Writing
a Device-Independent Palette Application</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">One
of the goals of the Palette Manager is to allow applications to use
palettes in a device-independent manner. As noted above, an
application can still reference the colors in a logical palette on a
nonpalette device; this capability is the key to device independence.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">DIBs
can be handled using palettes on any type of device. A palette
created from the color table is used on a palette device to get the
proper colors into the system palette and is essentially ignored on a
nonpalette device. Using RGB colors in the DIB table (DIB_RGB_COLORS)
is cleaner and a bit quicker on nonpalette devices than on palette
devices, but prematching the colors and using indexes in the color
table (DIB_PAL_COLORS) is faster than using RGB colors on palette
devices. When indexes are used on a nonpalette device, the Palette
Manager pulls out the indexed colors from the logical palette so that
the original RGB values are actually used for the DIB conversion. A
24-bit DIB also works with a logical palette in a device-independent
fashion: the palette is not used on nonpalette device drivers and is
used by the Palette Manager for color-matching on palette devices.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Using
colors outside of the DIB framework depends to a large extent on what
the application wants to accomplish, although there are some general
guidelines. If the application is outputting based on some working
palette (for example, drawing into a bitmap that is already based on
a palette), the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>PALETTEINDEX</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">-type
of color definition provides easy access to the palette. On
nonpalette devices, the color in the entry being referenced is used.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">When
the application is working with a more generalized palette and is
looking for the best color mapping on any type of device, the
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>PALETTERGB</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
color definition is more useful than the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>PALETTEINDEX</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
color definition. On palette devices, the RGB color is matched to the
nearest entry in the logical palette. On nonpalette devices, the RGB
value is used as is. A good spectrum of colors can be achieved on
palette devices, as well as on full-color devices, with a carefully
chosen palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Here
is an example of code for a device-independent color wash with blues:</span></font></font></p>
<p class="western" align="left" style="line-height: 0.02cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">hBluePal
= CreateBluePalette();</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">if
(hBluePal)</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">{</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">SelectPalette(hDC,
hBluePal, TRUE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">RealizePalette(hDC);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">SelectObject(hDC,
GetStockObject(NULL_PEN));</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.39cm">
<br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">for
(blue = 255, i = 0; i &lt; 64; blue -= 4, i++)</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">{</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
Create a brush with desired shade of blue; use </span></font></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
palette relative to get good color on palette devices.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">if
(hBrush = CreateSolidBrush(PALETTERGB(0, 0, blue)))</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">{</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">hBrush
= SelectObject(hDC, hBrush);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
A color block in the wash.</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">Rectangle(hDC,
i*5, 0, i*5+4, 100);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">hBrush
= SelectObject(hDC, hBrush);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">DeleteObject(hBrush);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">}</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">}</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">SelectPalette(hDC,
GetStockObject(DEFAULT_PALETTE), TRUE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">RealizePalette(hDC);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">DeleteObject(hBluePal);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">}</span></font></font></font></p>
<p class="western" align="left" style="line-height: 0.12cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
one problem with the code above is that the wash only consists of the
64 shades found in the palette, so the reliance on the palette is not
completely removed. Representing an intermediate color is not
trivial. If the color is requested using the above code (by
increasing the iterations through the color loop) and </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>PALETTERGB</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">,
it will be mapped to the nearest logical palette color, and the wash
will have repeated strokes of the same color on a palette device.
Using a </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>PALETTERGB</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
intermediate color works nicely for nonpalette devices because the
intermediate color can be represented either as a pure color or as a
dither. </span></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">With
a 16-bit full-color device driver, colors will most likely repeat due
to the resolution constraint of only 5 bits per color component,
unless the driver has been written to support dithering. Similarly,
palette devices with only 18 bits of color resolution per entry also
lose color resolution. A possible remedy for loss of color resolution
is for the application to perform its own dithering by using pattern
brushes and the colors from the palette. Although this solution
limits output to the logical palette's colors for all devices, the
output can be improved. Of course, full device independence can be
forsaken, and the application can create the dithers only on palette
devices.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Palette
Animation</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
term </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>palette
animation</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
refers to the process of directly changing a color in the hardware
palette in order to change the color of a pixel on the screen. This
technique creates the effect of motion or simply recolors an image.
Using the Palette Manager for palette animation is a two-step
process. First, the application creates an animating palette by
marking animating entries with the PC_RESERVED flag. During
realization, this entry does not match any existing colors in the
system palette but instead only maps to an unused slot (when
available). This system palette entry is then marked as an animating
entry and is not available for mapping by any other color. Once the
animating palette is created, selected, and realized, the application
calls </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>AnimatePalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
to accomplish the animating itself.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>AnimatePalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function is very similar to the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SetPaletteEntries</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function in that it specifies new settings for a subsection of a
logical palette. The difference is that </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>AnimatePalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
sets new values only for those entries that are marked with the
PC_RESERVED flag, and if such an entry is mapped to an animating
entry in the system palette, the entry in the system palette is set
with the new color as well. The Palette Manager sends the changed
entries to the device driver one entry at a time, not as a block. The
driver, in turn, sets the new colors in the hardware palette. No
window messaging takes place because any system palette entry that is
changing is off limits to all other applications. Any pixels on the
screen that are mapped to the changed entries now are displayed with
the new color. Depending on how the device driver synchronizes the
setting of the hardware palette with its screen refresh, some video
snow may appear during the process.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">One
thing to remember about animating palettes is that once the system
palette has no unused entries, subsequent colors marked with the
PC_RESERVED flag map to index 0 (black) and are not animated. As a
result, an application realizing an animating palette in the
background may end up with all the colors mapping to black, and this
makes for less than optimal repainting. One possible mechanism for
handling this is to create a parallel palette without the PC_RESERVED
flag for painting in the background. This, of course, requires that
the application refrains from animating when in the background.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">On
nonpalette devices, calling </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>AnimatePalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
accomplishes nothing more than setting new colors in the logical
palette. This palette function becomes really useful only on a
palette device.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">SetSystemPaletteUse</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SetSystemPaletteUse</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function allows an application to free up the entries used by the
static colors for general realization purposes. Black and white
remain static at index 0 and index 255, respectively. Although this
may sound like a great thing, the usefulness of this process is
restricted in many ways, not the least of which are the parts of the
system and the Palette Manager that do not properly handle the lack
of static colors. The term </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>system
colors</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
used below refers to the colors used by Windows to draw window
components; the colors are accessible via the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>GetSysColor</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
and </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SetSysColors</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
functions.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">To
properly use the SYSPAL_NOSTATIC option, an application should follow
these guidelines:</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Only
use the SYSPAL_NOSTATIC option when the application is the active
application and its window is maximized.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Save
current system colors.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Set
new system colors using only black and white.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Send
the WM_SYSCOLORCHANGE message to inform the rest of the system of
this change.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Refrain
from using explicit RGB colors, except for black and white. (The
colors used should all be relative to the application's palette.)</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Any
palette that is to be realized must first be unrealized using
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>UnrealizeObject</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">.</span></font></font></p>
<p class="western" align="left" style="line-height: 0.01cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">When
the SYSPAL_NOSTATIC option is set, all that happens internally is
that the Palette Manager updates a few data structures to reflect the
fact that all but two of the static colors are no longer static. The
colors themselves remain in place until a realization needs those
entries.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">After
normal system palette use is established when the application calls
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SetSystemPaletteUse</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
with the SYSPAL_STATIC option, the application should do the
following to restore the system:</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">1.</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Restore
the original system colors.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">2.</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Send
the WM_SYSCOLORCHANGE message to inform the rest of the system of
this change.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">3.</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Any
palette realized with the SYSPAL_NOSTATIC setting must be unrealized
using </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>UnrealizeObject</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
before its next realization.</span></font></font></p>
<p class="western" align="left" style="line-height: 0.01cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
system palette should be restored to its normal state as soon as the
application is no longer the active application. When the system
palette is restored to normal behavior using the SYSPAL_STATIC
option, the Palette Manager simply restores the static colors and
informs the device driver of this change.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Of
course, if the application can ensure that no drawing is done with
the system colors (for example, a maximized window with no title bar
or menus), there is no need for saving and restoring the system color
information.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
basic problem with using the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SetSystemPaletteUse</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function is that the Palette Manager does not remap the default
palette to use only black and white, and the device driver is not
made aware of the lack of the static colors. As a result, any
operation that involves using the static colors (for example, using
RGB colors and drawing window borders) maps to the system palette
entries that used to contain the static colors. The results on the
screen are unpredictable. Why isn't the support better? Mostly
because the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SetSystemPaletteUse</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function is a stopgap measure to deal with the problem of
insufficient palette access. The Palette Manager is designed for
managing the shared use of the system palette, and once the static
colors are gone, palette sharing is no longer a viable possibility;
ensuring that all other applications are still color-matched in an
acceptable manner is not easily possible. If you want your
application to use all 256 colors, you should follow the rules above
regarding the SYSPAL_NOSTATIC option so that the application does not
interfere with the operation of other applications running in the
system.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>GetSystemPaletteUse</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function determines the current state of the system palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Other
Functions</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
Palette Manager provides a few other support functions for
manipulating logical palettes and getting information about the
system palette. These functions are relatively simple and
straightforward.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.42cm">
<font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"><b>SetPaletteEntries
and GetPaletteEntries</b></span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SetPaletteEntries</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function lets an application alter the color information of entries
in a logical palette. To become effective, the newly changed palette
needs to be re-realized. Because the palette has changed, the Palette
Manager treats it as a completely new palette, and the foreground
mapping is built up from scratch. Any bitmaps that were attached to
the original version of the palette are no longer necessarily valid.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>GetPaletteEntries</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function gets the contents of a logical palette. To extract all the
information about the palette, use the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>GetPaletteEntries</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function in conjunction with the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>GetObject</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function, which returns the number of entries in the palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.42cm">
<font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"><b>ResizePalette</b></span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>ResizePalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function allows for the resizing of a logical palette. Similar to
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SetPaletteEntries</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">,
the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>ResizePalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function results in a palette that must be re-realized by the
application to become useful and is treated by the Palette Manager as
a new palette that needs a new foreground mapping.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.42cm">
<font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"><b>UnrealizeObject</b></span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">When
a logical palette is explicitly unrealized using the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>UnrealizeObject</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function, the Palette Manager throws out any previous realization
information that was maintained for the palette. The next time the
palette is realized by an application, the Palette Manager has to
realize it from scratch, rebuilding the foreground mapping in the
process. This function is useful in cases where you expect the
palette to have a different realization, possibly matching better to
the current system palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.42cm">
<font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"><b>GetNearestPaletteIndex</b></span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>GetNearestPaletteIndex</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function matches a given color to a logical palette. The function
returns the index of the logical palette entry whose color is chosen
by the Palette Manager to be the closest. This same functionality
takes place inside the Palette Manager when dealing with a </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>PALETTERGB</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
color on a palette device.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.42cm">
<font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"><b>GetSystemPaletteEntries</b></span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">As
the name implies, the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>GetSystemPaletteEntries</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function returns information about the color values in the system
palette. Only the color values are returned; internal information
such as which entries are used by the foreground palette and which
entries are PC_RESERVED is not accessible.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Clipboard
Use with Bitmaps</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
Clipboard data format, CF_PALETTE, is used for passing logical
palettes. Its main purpose is to permit an application to properly
paste a CF_BITMAP object on a palette device. Unless the bitmap is
built entirely of static colors (which could be the case with
applications that are not palette-aware), the palette is necessary
for displaying the bitmap. Creating a new palette with the same
colors does not necessarily guarantee that the bitmap color
information remains valid. A palette-using application placing a
palette-based bitmap in the Clipboard must also include the defining
palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">If
the source application does not provide a palette with the bitmap,
the application is indicating that the default palette should be used
to display the bitmap. This is the case with applications that do not
use palettes.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
best way to place an image in the Clipboard is to use a DIB. A
device-independent version of the bitmap can be used by palette-savvy
applications, as well as those that lack palette expertise. The DIB
method further promotes device independence by being useful on
nonpalette devices.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Another
way to place a bitmap in the Clipboard is to use a metafile that
contains palette-based records. The following sequence of records
does the job nicely:</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">1.</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Create
a matching palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">2.</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Select
the palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">3.</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Realize
the palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">4.</span></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Use
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>StretchDIBits</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
on a DIB version of the bitmap with equal source and destination
extents. (Or use </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>BitBlt</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
on a device-dependent bitmap, which is recorded using a DIB.)</span></font></font></p>
<p class="western" align="left" style="line-height: 0.01cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Applications
not aware of palettes can play this metafile and display a
palette-based bitmap without even knowing it. Meanwhile,
palette-using applications probably benefit more from using the
CF_DIB format because the relevant color information is more readily
accessible.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">The
Trouble with Metafiles</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Placing
palettes into metafiles is tricky business. First, the metafile needs
to be as undamaging as possible to the visuals of the application
performing the playback. Second, once palette information is placed
in a metafile, it is very difficult for an application to extract
that information.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">To
illustrate the first issue, imagine an application that is about to
play two metafiles to the screen. If both metafiles contain a
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SelectPalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">/</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>RealizePalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
pair that results in a foreground palette realization, the second
metafile to be played could blow away the first one's system palette
settings and thereby destroy the image. Such carnivorous behavior
could be avoided by recording the metafile's palette selection so
that the palette is always forced to be a background palette. In this
way, when the metafile is played back, it always has a lower palette
priority and does not degrade any palette-based image already
displayed by the application. Unfortunately, this is not possible
with Windows versions 3.0 and 3.1 due to faulty implementation that
loses the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>bForceBackground</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
parameter information during recording. When played, the
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SelectPalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
call always has the parameter set to FALSE. The way to work around
this problem during playback is for the application to enumerate the
metafile's records, trap META_SELECTPALETTE records, and play them
manually with </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>bForceBackground</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
set to TRUE:</span></font></font></p>
<p class="western" align="left" style="line-height: 0.02cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">//
In application's EnumFunc for metafile enumeration...</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.39cm">
<br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"><font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">case
META_SELECTPALETTE:</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">SelectPalette(hDC,
lpHTable-&gt;objectHandle[(lpMFR-&gt;rdParm[0])], </span></font></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">TRUE);</span></font></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.32cm">
<font color="#000000"> <font face="Courier New, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">break;</span></font></font></font></p>
<p class="western" align="left" style="line-height: 0.12cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
second limitation is not a concern for most applications, but those
applications that want to optimize palette use or to merge palette
information need to know what colors are being used inside a
metafile. Currently, the only way to do this is to use the
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>EnumMetaFile</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function to look at each record and extract the needed color
information. Color information is found in records that create and
alter palettes and in DIB records that have RGB color tables.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Palette-Insensitive
Applications</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Applications
that use palettes explicitly can have parts that do not have any
knowledge of the Palette Manager. Palette insensitivity exists when
no application-created palette is used for display purposes and only
the implicitly selected default palette is in use.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Applications
that are not palette-aware continue to work on a palette device by
relying on the static color scheme. These applications never request
colors that are based on a palette; only RGB values are used. As
mentioned above, the device driver provides VGA-level support for RGB
colors by using the static colors. Applications do, however, lose the
ability to use all of the available ROPs in a consistent manner on
palette devices, although XOR still works. Using ROPs, it is possible
for an application that is not palette-aware to end up with pixel
values that do not reference a static color. This type of behavior,
hopefully, is rare.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">A
palette-insensitive application does not need to worry about
maintaining a palette in conjunction with color bitmaps because the
default palette provides all of the needed color information. Color
bitmaps created by this application are based on the default palette
and can represent all of the static colors, which cover the entire
color range accessible by the application. Because the default
palette has a fixed mapping to the system palette, no bitmap
translation is needed for blting.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">It
is possible for a palette-insensitive application to use a palette
without knowing it by playing a metafile that contains palette-based
information. The application is able to simply play the metafile and
display a palette-based image. The problem that the application now
faces is that it has no support for dealing with system palette
changes, so the image may not be ideally displayed at all times. The
Palette Manager has no support for handling this sort of situation;
the application would have to be made palette-aware to permit
consistent display of palette-based metafiles.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Pasting
a bitmap from the Clipboard is another potential pitfall. Because
memory bitmaps on palette devices are based on a logical palette
(with the exception of those made entirely of static colors), the
palette that accompanies the bitmap in the Clipboard is needed for
proper display. The bitmap alone is useless. Looking for an
alternative Clipboard format, such as a DIB or a metafile with a
built-in palette, is probably the best solution. Palette applications
should be aware of this possible scenario and provide an alternative
format whenever possible.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">MYPAL:
Tool for Tracking the System Palette</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
MYPAL application in the Microsoft Windows version 3.1 (and version
3.0) Software Development Kit (SDK) is a useful tool for tracking the
system palette. This application uses PC_EXPLICIT entries in its
logical palette to mirror the contents of the system palette. With
MYPAL visible, it is possible to watch the system palette as it
changes. Note that the application does not repaint with the new
colors; the rectangles displayed are mapped to the corresponding
entries in the hardware palette and simply reflect its current
status.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Another
feature of the MYPAL application is its ability to identify the
hardware mapping of pixels on the screen. When you press the right
mouse button in MYPAL, the application identifies the current mapping
of the pixel pointed to by the cursor. By dragging the cursor to the
pixel in question, it is possible to identify the color of an
individual pixel. Using the ZOOMIN application, also found in the
SDK, helps you get accurate pixel identification. </span></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
mechanism for determining the hardware mapping of a single index on
the screen is rather unclean. When a pixel is chosen for
identification, </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>GetPixel</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
is used to get its color value. To arrive at a hardware mapping, this
color is then compared to each entry in the current system palette.
When a match is found, the proper entry is identified. This algorithm
depends on nonrepetition of colors in the system palette, which is
not necessarily guaranteed (repeats can be set using PC_RESERVED and
PC_NOCOLLAPSE entries in a logical palette). Also, the MYPAL
application in the Windows version 3.0 SDK has another problem in
that its internal tracking of the system palette is only updated in
response to the WM_PAINT message; this is not sufficient because a
change in the system palette does not cause the application to
repaint. A better approach, found in MYPAL in the Windows version 3.1
SDK, is to update that information on a need-to-know basis, when the
right mouse button is first pressed. Neither version competently
deals with animating entries.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">What
the Device Driver Sees</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">All
of the actual palette managing is at the GDI level. A device driver
that provides palette support is simply told how to set the hardware
palette and how to interpret indexes in bitmaps. For all
palette-based operations, the driver does not even deal with actual
colors, only indexes.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Setting
the hardware palette is fairly easy. If any change is necessitated
either during realization or as a result of palette animation, the
Palette Manager passes the new palette information to the driver. The
driver then sets the new values into the hardware color lookup table.
Poof! The colors are changed.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">With
every new palette realization, the Palette Manager also provides the
device driver with a corresponding bitmap translation table. This
table, one entry for every possible index, defines how memory bitmaps
are to be interpreted. The driver uses this table every time a
memory-to-screen blt takes place; every pixel value in the memory
bitmap is translated by this table to the corresponding screen pixel
value. The table is built by the Palette Manager as a mapping between
the logical palette's foreground indexes and its current realization
indexes. In cases where the translation table is an identity table,
there is no need for translation, and GDI sends the driver NULL
instead of an actual table. The driver maintains a current
translation table at all times, but it is not used for
screen-to-screen or memory-to-memory blts.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
device driver builds an inverse of the translation table for
performing screen-to-memory blts. The inverse table is by no means
guaranteed to be one-to-one when the palette is in the background, so
this type of blt can very easily lose color information. To ensure a
valid screen-to-memory blt, the application must be the foreground
application and use the foreground palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">When
GDI passes a color to the driver (for object realization, drawing
modes, and so forth), the color can be either an RGB color or an
index. If the application passed in a pure RGB value, it is passed as
is to the driver, and the driver proceeds to simulate VGA behavior
with the color by using the static colors in the system palette. The
VGA simulation means that the color is matched to the 16 VGA colors
and dithered using those colors when a solid brush is being realized.
The Palette Manager converts colors that are based on a logical
palette into indexes and passes these indexes to the driver. If the
DC involved in the operation is a screen DC, the index is the current
mapping of that color; if the DC is a memory DC, the index is the
foreground mapping of the color.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">DIB
operations require the Palette Manager to massage the input so that
the driver can interpret the colors correctly. A palette driver never
actually sees any colors in conjunction with a DIB; the communication
for both getting and setting is accomplished using indexes. For
converting DIBs into a device-dependent bitmap (via </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SetDIBits</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
or </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>StretchDIBits</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">),
the Palette Manager maps each entry in the DIB's color table to the
current palette and then uses the palette's corresponding foreground
indexes to build a new index table that is passed to the driver. The
driver sees only the foreground indexes. When the DIB is to be set
directly to the device (via </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SetDIBitsToDevice</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
or </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>StretchDIBits</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">),
the Palette Manager builds the driver's table using the palette's
current mapping instead of the foreground mapping. Palette-based
device drivers do not touch the color table when performing a
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>GetDIBits</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
operation; the Palette Manager itself fills in the color information
and provides the driver with a translation table (not necessarily
one-to-one) specifying the mapping from memory bitmap pixel values to
DIB index values.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">For
24-bit DIBs, the translation process gets a bit uglier. Because the
DIB data consists of only 24-bit RGB values, each one must be mapped
to the current palette individually during a &quot;set&quot;
operation. The driver calls a Palette Manager function for each color
to get this mapping. Yes, this is slow. Many drivers implement a
color caching scheme of some sort to minimize calls back to the
Palette Manager. Handling a </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>GetDIBits</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
operation with a 24-bit DIB as the destination is easier than the
&quot;set&quot; operation because the source bitmap has a limited
number of colors. The Palette Manager provides the driver with a
lookup table of RGB values, each corresponding to an index in the
source bitmap.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Informational
Limitations</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
Palette Manager buffers applications from the actual details of the
system palette. Palette realization from an application's perspective
is just a black box that shields the system palette from direct
outside interference. As a result, some applications do not have as
much control over the realization process as they would like.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">An
application cannot choose the system palette index to which a given
color maps. (The PC_EXPLICIT option lets you attach an entry to a
system palette entry, but it does not actually change the system
palette.) Controlling exactly how a palette maps to the system
palette is useful for an application that wants to use raster
operations in a meaningful fashion. The PC_NOCOLLAPSE flag gives an
application some control. By knowing how many static colors are in
the system palette and how the Palette Manager realizes PC_NOCOLLAPSE
palettes (a less polite method is to use a PC_RESERVED palette), an
application can get its colors spread, in order, in the nonstatic
entries of the system palette. Remember that flushing the system
palette is a precaution worth taking to guarantee that the first
entry used is at index 10, assuming a standard system palette.
Although the application can't specifically dictate the placing of a
single color, it can control the ordering and placement of an entire
logical palette. Of course, this mechanism only works when the
logical palette has first choice in an empty system palette (to be
precise, the application needs to have the foreground palette).</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Conversely,
once the Palette Manager has realized a palette, it is not trivial
for an application to determine exactly where the Palette Manager has
mapped each logical entry. One way to make this determination is to
use the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>GetSystemPaletteEntries</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function to get a copy of the system palette and then search for each
logical color to see where it is in the system palette. This works
for colors that are actually set in the system palette, but it does
not accomplish the task if the color is color-matched to the system
palette. A workable, but not perfect, solution is for the application
to create a logical palette from the system palette entries and use
the </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>GetNearestPaletteIndex</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function to get a mapping. The limitation that remains is that colors
in the system palette may be reserved (and not used for
color-matching) or have multiple copies (introduced by an application
using PC_RESERVED or PC_NOCOLLAPSE).</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Static
Color Gamma Correction</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">A
small wrench is thrown into the workings of the Palette Manager by
the digital-to-analog converters (DACs) that most devices have. While
the DACs may generate a linear relationship between the value of a
color and the visual appearance of that color, the human eye does not
work in the same manner. Without some sort of correction, the color
RGB(128,0,0) does not appear to the eye to be half the intensity of
the color RGB(255,0,0); in fact, it looks much darker. The process of
manipulating the meanings of colors to get visual linearity is called
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>gamma
correction</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">.
An RGB color value is passed to the device driver, and the driver
converts the value (usually by means of a lookup table for each
component) into a corrected RGB value that is then passed to the
hardware. The result is that, for example, the color RGB(128,0,0) is
actually displayed using the hardware value RGB(192,0,0).</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">To
perform truly effective gamma correction, the hardware setup needs to
be calibrated and setup-specific numbers must be generated. This
level of color calibration is also needed for device-independent
color, which is in the works for future products. Computing a
generalized correction per device driver is another possibility, but
at the time the Palette Manager was designed, this approach seemed a
cop-out and was not implemented. Another consideration is that gamma
correction inevitably causes loss of actual color resolution because
the color mapping is clearly not one-to-one. Some of the dim hardware
colors are not accessible, and multiple bright colors may map to the
same hardware color.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
solution used by Windows versions 3.0 and 3.1 is not entirely
elegant. The driver uses values of 191 instead of 128 in the hardware
palette for the low-intensity static colors. This tactic achieves a
brightness comparable to a standard VGA. When the driver performs VGA
simulations for RGB color-matching, it treats the low-intensity
colors as though they have values of 128, so that, for example, a
solid brush with the color RGB(128,0,0) maps to a solid low-intensity
red and is not dithered. The Palette Manager is not aware of the
gamma correction and maintains the system palette with the 191-based
values for palette matching; the default palette is mapped as a
special case so that its 128-based low-intensity colors map to the
proper static entries in the system palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">The
results for applications are mostly innocuous, but they do change
some expectations. The color table for 8-bit DIBs returned by the
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>GetDIBits</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
function has the low-intensity static colors specified with 191-based
values. These values have the very convenient property that when
mapped down to VGA-resolution colors (a choice of 0, 128, or 255),
the chosen mapping is 128, so the low-intensity colors are mapped
correctly on VGA-type devices. A palette created from this color
table has the 191-based values in it, and when it is realized, the
colors map to the static colors because palette realization is based
on the real values in the hardware palette.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Confusing?
Well, it gets a bit worse. The one loophole in the scheme becomes
apparent when a palette is created with a 128-based color such as a
DIB created on a VGA. The palette color, when realized, is matched to
a true 128-based color in the hardware, getting its own entry in the
system palette when appropriate. When used for drawing, the color is
quite a bit darker than on a VGA. Things are even uglier if the
application decides to also do some drawing that is </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><i>not</i></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
based on the palette by simply using an RGB color, because the device
driver maps that color to the matching static color. When this color
is used for drawing, the resulting color is much brighter than the
palette-based version. This type of visual inconsistency can be
avoided by not mixing palette-based and RGB-based drawing in the same
application.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">One
less-than-elegant workaround to the problem of DIBs stored with VGA
colors is to make a special case for the color table. If the color
table has the exact logical colors found on the VGA driver
(specifically, colors with low intensity are based on 128 and colors
with high intensity are based on 255), then the application can use
the default palette (</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>GetStockObject</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">(DEFAULT_PALETTE))
for displaying the DIB instead of creating a palette based on the
color table. The default palette's special mapping ensures that it is
mapped to the proper indexes in the system palette and that its
low-intensity colors are not dim. Note that making a copy of the
default palette is not the same as using the actual default palette
stock object because the copy does not maintain the stock object's
special-case mapping.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.49cm">
<font color="#000000"><font size="4" style="font-size: 14pt"><span lang="en-US">Concluding
Thoughts</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.32cm; margin-right: 0.42cm; line-height: 0.35cm">
<font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">As
a conclusion to this rather lengthy discussion, here is a quick
summary of the important concepts of the Palette Manager:</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Bitmaps
are inextricably tied to palettes on palette devices. Without the
proper palette, the bitmap cannot be displayed properly.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">A
palette's foreground mapping is constant for the life of the palette.
Thus, the palette is realized quickly when in the foreground, and
memory-to-screen blts for the foreground application do not require
any translation. </span></font></font>
</p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Once
an application changes a palette using </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SetPaletteEntries</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
or </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>ResizePalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
or unrealizes it with </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>UnrealizeObject</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">,
the foreground mapping is lost. The next time the palette is
realized, the Palette Manager must do so from scratch.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">For
the palette to be effective, an application must realize the palette
before drawing.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">While
not necessarily the quickest approach, completely invalidating the
client area and then repainting from scratch is guaranteed to
generate the best possible palette-based drawing. This is an
important fact when coding a response to a situation involving a
palette change (WM_PALETTECHANGED and WM_QUERYNEWPALETTE).</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">When
an application places a bitmap (CF_BITMAP) in the Clipboard on a
palette device, the application must also place the corresponding
palette (CF_PALETTE) in the Clipboard. Even better, a DIB with an RGB
color table can be placed in the Clipboard.</span></font></font></p>
<p class="western" align="left" style="margin-left: 0.95cm; margin-right: 0.42cm; text-indent: -0.64cm; line-height: 0.35cm">
<font color="#000000"><font face="Symbol, serif"><font size="2" style="font-size: 10pt"><span lang="en-US">&middot;</span></font></font></font><font color="#000000"><font size="3" style="font-size: 12pt"><span lang="en-US"> </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">Most
palette functions do nothing on nonpalette devices. Specifically, the
functions </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>RealizePalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">,
</span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>AnimatePalette</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">,
and </span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US"><b>SetSystemPaletteUse</b></span></font></font><font color="#000000"><font size="2" style="font-size: 10pt"><span lang="en-US">
do not affect a nonpalette device. Also, Windows does not send any of
the palette messages when running on a nonpalette device.</span></font></font></p>
<p class="western" align="left" style="line-height: 0.01cm"><font color="#000000">
</font><br/>
</p>
<p class="western" align="left" style="margin-left: 0.32cm; line-height: 0.42cm">
<br/>
</p>
<p class="western" align="left" style="line-height: 0.42cm"><br/>
</p>
<p class="western" align="left" style="line-height: 0.42cm"><br/>
</p>
<p class="western" align="left" style="line-height: 0.35cm"><br/>
</p>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment