<HTML
><HEAD
><TITLE
>SDL_SetPalette</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
"><LINK
REL="HOME"
TITLE="SDL Library Documentation"
HREF="index.html"><LINK
REL="UP"
TITLE="Video"
HREF="video.html"><LINK
REL="PREVIOUS"
TITLE="SDL_SetColors"
HREF="sdlsetcolors.html"><LINK
REL="NEXT"
TITLE="SDL_SetGamma"
HREF="sdlsetgamma.html"></HEAD
><BODY
CLASS="REFENTRY"
BGCOLOR="#FFF8DC"
TEXT="#000000"
LINK="#0000ee"
VLINK="#551a8b"
ALINK="#ff0000"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>SDL Library Documentation</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="sdlsetcolors.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="sdlsetgamma.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><H1
><A
NAME="SDLSETPALETTE"
></A
>SDL_SetPalette</H1
><DIV
CLASS="REFNAMEDIV"
><A
NAME="AEN1517"
></A
><H2
>Name</H2
>SDL_SetPalette&nbsp;--&nbsp;Sets the colors in the palette of an 8-bit surface.</DIV
><DIV
CLASS="REFSYNOPSISDIV"
><A
NAME="AEN1520"
></A
><H2
>Synopsis</H2
><DIV
CLASS="FUNCSYNOPSIS"
><A
NAME="AEN1521"
></A
><P
></P
><PRE
CLASS="FUNCSYNOPSISINFO"
>#include "SDL.h"</PRE
><P
><CODE
><CODE
CLASS="FUNCDEF"
>int <B
CLASS="FSFUNC"
>SDL_SetPalette</B
></CODE
>(SDL_Surface *surface, int flags, SDL_Color *colors, int firstcolor, int ncolors);</CODE
></P
><P
></P
></DIV
></DIV
><DIV
CLASS="REFSECT1"
><A
NAME="AEN1527"
></A
><H2
>Description</H2
><P
>Sets a portion of the palette for the given 8-bit surface.</P
><P
>Palettized (8-bit) screen surfaces with the
<TT
CLASS="LITERAL"
>SDL_HWPALETTE</TT
> flag have two palettes, a logical
palette that is used for mapping blits to/from the surface and a
physical palette (that determines how the hardware will map the colors
to the display). <A
HREF="sdlblitsurface.html"
>SDL_BlitSurface</A
>
always uses the logical palette when blitting surfaces (if it has to
convert between surface pixel formats). Because of this, it is often
useful to modify only one or the other palette to achieve various
special color effects (e.g., screen fading, color flashes, screen dimming).</P
><P
>This function can modify either the logical or physical palette by
specifing <TT
CLASS="LITERAL"
>SDL_LOGPAL</TT
> or
<TT
CLASS="LITERAL"
>SDL_PHYSPAL</TT
>the in the <TT
CLASS="PARAMETER"
><I
>flags</I
></TT
>
parameter.</P
><P
>When <TT
CLASS="PARAMETER"
><I
>surface</I
></TT
> is the surface associated with the current
display, the display colormap will be updated with the requested colors.  If
<TT
CLASS="LITERAL"
>SDL_HWPALETTE</TT
> was set in <A
HREF="sdlsetvideomode.html"
>SDL_SetVideoMode</A
> flags,
<TT
CLASS="FUNCTION"
>SDL_SetPalette</TT
> will always return <SPAN
CLASS="RETURNVALUE"
>1</SPAN
>,
and the palette is guaranteed to be set the way you desire, even if the window
colormap has to be warped or run under emulation.</P
><P
>The color components of a
<A
HREF="sdlcolor.html"
><SPAN
CLASS="STRUCTNAME"
>SDL_Color</SPAN
></A
> structure
are 8-bits in size, giving you a total of
256<SUP
>3</SUP
>=16777216 colors.</P
></DIV
><DIV
CLASS="REFSECT1"
><A
NAME="AEN1547"
></A
><H2
>Return Value</H2
><P
>If <TT
CLASS="PARAMETER"
><I
>surface</I
></TT
> is not a palettized surface, this function
does nothing, returning <SPAN
CLASS="RETURNVALUE"
>0</SPAN
>.  If all of the colors were set
as passed to <TT
CLASS="FUNCTION"
>SDL_SetPalette</TT
>, it will return
<SPAN
CLASS="RETURNVALUE"
>1</SPAN
>.  If not all the color entries were set exactly as
given, it will return <SPAN
CLASS="RETURNVALUE"
>0</SPAN
>, and you should look at the
surface palette to determine the actual color palette.</P
></DIV
><DIV
CLASS="REFSECT1"
><A
NAME="AEN1555"
></A
><H2
>Example</H2
><PRE
CLASS="PROGRAMLISTING"
>        /* Create a display surface with a grayscale palette */
        SDL_Surface *screen;
        SDL_Color colors[256];
        int i;
        .
        .
        .
        /* Fill colors with color information */
        for(i=0;i&#60;256;i++){
          colors[i].r=i;
          colors[i].g=i;
          colors[i].b=i;
        }

        /* Create display */
        screen=SDL_SetVideoMode(640, 480, 8, SDL_HWPALETTE);
        if(!screen){
          printf("Couldn't set video mode: %s\n", SDL_GetError());
          exit(-1);
        }

        /* Set palette */
        SDL_SetPalette(screen, SDL_LOGPAL|SDL_PHYSPAL, colors, 0, 256);
        .
        .
        .
        .</PRE
></DIV
><DIV
CLASS="REFSECT1"
><A
NAME="AEN1558"
></A
><H2
>See Also</H2
><P
><A
HREF="sdlsetcolors.html"
>SDL_SetColors</A
>,
<A
HREF="sdlsetvideomode.html"
>SDL_SetVideoMode</A
>,
<A
HREF="sdlsurface.html"
>SDL_Surface</A
>,
<A
HREF="sdlcolor.html"
>SDL_Color</A
></P
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="sdlsetcolors.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="sdlsetgamma.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>SDL_SetColors</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="video.html"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>SDL_SetGamma</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>