Microsoft KB Archive/74799

From BetaArchive Wiki

FILE: Animate.exe Palette Animation in Windows

Q74799



The information in this article applies to:


  • Microsoft Windows Software Development Kit (SDK) 3.1





SUMMARY

"Animation" of the Windows palette is the replacement of one set of colors in the palette by another set of colors. This article discusses animation and how it is used in a Windows-based application. Animate.exe is a sample application that enables you to draw a color wheel and "spin" it using animation can be found in the Microsoft Software Library.



MORE INFORMATION

The following files are available for download from the Microsoft Download Center:

Animate.exe

For additional information about how to download Microsoft Support files, click the article number below to view the article in the Microsoft Knowledge Base:

Q119591 How to Obtain Microsoft Support Files from Online Services

Microsoft used the most current virus detection software available on the date of posting to scan this file for viruses. Once posted, the file is housed on secure servers that prevent any unauthorized changes to the file.



For an example of animation, consider a chain of rectangles on the screen:

  +------+ +------+ +------+ +------+ +------+ +------+
  |      | |      | |      | |      | |      | |      |
  |idx 20| |idx 21| |idx 22| |idx 20| |idx 21| |idx 22| ...
  |      | |      | |      | |      | |      | |      |
  +------+ +------+ +------+ +------+ +------+ +------+ 

If index 20 is mapped to the color green in the palette, index 21 is mapped to red, and index 22 is mapped to blue, a "Broadway Lights" effect can be achieved by remapping the three colors to the different indexes. For example, mapping red to 20, blue to 21, and green to 22, the "lights" appears to move to the left.

Changing the hardware registers (the system palette) is much faster than redrawing the rectangles, because no pixels need to be updated. Only a very small set of hardware registers need to be changed. This allows for very fast graphical effects.

With video systems capable of supporting 256 colors, these hardware registers are changed through palette animation, and the GDI call, AnimatePalette() was specifically designed for this purpose.

This article is meant to be a supplement to the information provided in the Windows Software Development Kit (SDK) manuals, not a replacement. This article will discuss the actual steps necessary to create and use a palette in an application from a programmer's standpoint.

Q: What is the difference between a logical palette and the lpPaletteColors as referenced in the AnimatePalette() function description?

A: The logical palette is the one made by CreatePalette(), while the lpPaletteColors is a pointer to a separate memory structure that holds the animation colors. For this article, the term "animation palette" will be used to refer to the memory structure pointed to by lpPaletteColors.

Q: What special considerations are necessary for animation?

A: There are two necessary considerations.

  • The palette entry in the logical palette must have theb PC_RESERVED flag. A typical line of code that will be placed into the application prior to the CreatePalette() call to set this flag will be:
  • For ease of programming and animation, sequential indexes for the animated colors in the logical palette should be used. This will allow the smallest possible array to be used to contain the animation palette, and will produce a one-to-one correspondence between the logical palette and the animation palette.

Q: How is palette animation actually done?

A: There are two steps to animating the Palette:

  1. Change the color values in the animation palette to create the desired effect. The following example shifts the colors in the animation palette down one index:
  2. Call AnimatePalette(). The following example will animate the 210 entries starting at index number 20:

Additional query words:

Keywords : kbfile kbsample kb16bitonly kbGDI kbPalettes kbSDKWin16
Issue type : kbinfo
Technology : kbAudDeveloper kbWin3xSearch kbSDKSearch kbWinSDKSearch kbWinSDK310


Last Reviewed: December 4, 1999
© 2001 Microsoft Corporation. All rights reserved. Terms of Use.