Created
January 12, 2019 21:19
-
-
Save countingpine/e94043d783796a881e7183ddd067ae27 to your computer and use it in GitHub Desktop.
Conversion of palman.wri from (https://web.archive.org/web/20031019060607/http://download.microsoft.com/download/platformsdk/sample43/1/W95/EN-US/Palman.exe)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!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">®</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">™</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 "Palette | |
| Awareness" 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">®</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">™</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">·</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">·</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 "hardware palette" | |
| 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">·</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">·</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">·</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">·</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">·</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">·</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">·</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 "pure" | |
| 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 "behind the scenes," 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—a big one—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->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->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 < 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->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->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->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->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 "Should the | |
| previous palette be realized?" The answer is "It depends." | |
| 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—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—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,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mQCIiOT0NQF46623CMTPnj1Lf587dy6Bm6zABGDyE08AGG43btw4Z84c/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 "fast" | |
| 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 | |
| "into" 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">·</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">·</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">·</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">·</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 < 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 > 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, | |
| &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, | |
| &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—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 "clean" 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 "Using DIBs with Palettes" 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 "excess" 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 "block" | |
| 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—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 "never used" | |
| 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,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RERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCGEhEREZEBGEOJiIiIyACMoURERERkAMZQIiIiIjIAYygRERERGYAxlIiIiIgMwBhKRERERAZgDCUiIiIiAzCG0klsbm4uLCyMjIzgp9G1EF1qa2tr8/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 < 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">·</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">·</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">·</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">·</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">·</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">·</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->objectHandle[(lpMFR->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 "set" | |
| 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 | |
| "set" 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">·</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">·</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">·</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">·</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">·</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">·</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">·</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