FILE: Animate.exe Palette Animation in Windows

ID: Q74799


The information in this article applies to:


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 file is available for download from the Microsoft Software Library:

~ Animate.exe
For more information about downloading files from the Microsoft Software Library, please see the following article in the Microsoft Knowledge Base:
Q119591 How to Obtain Microsoft Support Files from Online Services


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. 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. 
       PALETTEENTRY   palentries[210];  /* The animation palette */ 
    
       ...
    
       palentry.peRed   = palentries[209].peRed;
       palentry.peGreen = palentries[209].peGreen;
       palentry.peBlue  = palentries[209].peBlue;
    
       for (i = 209; i > 0; i--)
         {
         palentries[i].peRed   = palentries[i-1].peRed;
         palentries[i].peGreen = palentries[i-1].peGreen;
         palentries[i].peBlue  = palentries[i-1].peBlue;
        }
    
       palentries[0].peRed   = palentry.peRed;
       palentries[0].peGreen = palentry.peGreen;
       palentries[0].peBlue  = palentry.peBlue; 
  3. Call AnimatePalette(). The following example will animate the 210 entries starting at index number 20:


  4. 
       hDC = GetDC(hWnd);
    
       hOldPal = SelectPalette(hDC, hPal, FALSE);
    
       // Call Animate Palette, and realize the colors
       AnimatePalette(hPal, 20, 210, (LPPALETTEENTRY)palentries);
    
       RealizePalette(hDC);
    
       // Housekeep
       SelectPalette(hDC, hOldPal, TRUE);
       ReleaseDC(hWnd, hDC); 

Additional query words:


Keywords          : kbfile kbsample kb16bitonly kbGDI kbPalettes kbSDKWin16 
Version           : WINDOWS:3.1
Platform          : WINDOWS 
Issue type        : kbinfo 

Last Reviewed: July 13, 1999