---
name: "SDL_SetColors"
section: "3"
platform: "linux"
package: "libsdl1.2-dev"
version: "1.2.15+dfsg2-8"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/SDL_SetColors"
---

# SDL\_SetColors(3)

Sets a portion of the colormap for the given 8-bit surface.

## NAME

SDL\_SetColors - Sets a portion of the colormap for the given 8-bit surface.

## SYNOPSIS

**#include "SDL.h"**

**int SDL\_SetColors**(**SDL\_Surface \*surface, SDL\_Color \*colors, int firstcolor, int ncolors**);

## DESCRIPTION

Sets a portion of the colormap for the given 8-bit surface.

When **surface** is the surface associated with the current display, the display colormap will be updated with the requested colors. If **SDL\_HWPALETTE** was set in *SDL\_SetVideoMode* flags, **SDL\_SetColors** will always return **1**, 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.

The color components of a **SDL\_Color** structure are 8-bits in size, giving you a total of 256^3 =16777216 colors.

Palettized (8-bit) screen surfaces with the **SDL\_HWPALETTE** 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). **SDL\_SetColors** modifies both palettes (if present), and is equivalent to calling *SDL\_SetPalette* with the **flags** set to **(SDL\_LOGPAL \| SDL\_PHYSPAL)**.

## RETURN VALUE

If **surface** is not a palettized surface, this function does nothing, returning **0**. If all of the colors were set as passed to **SDL\_SetColors**, it will return **1**. If not all the color entries were set exactly as given, it will return **0**, and you should look at the surface palette to determine the actual color palette.

## EXAMPLE

```
/* 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<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
", SDL_GetError());
  exit(-1);
}
/* Set palette */
SDL_SetColors(screen, colors, 0, 256);
.
.
.
.
```

## SEE ALSO

**SDL\_Color** **SDL\_Surface**, **SDL\_SetPalette**, **SDL\_SetVideoMode**
