NOTE: Some machines at the University of Colorado have a D: drive that is too small to compile a project. In this case, you'll get an out of memory error. Move your work to a temporary directory on the C: Drive for these machines.
#include <graphics.h> void setpalette(int colornum, int color);
You can partially (or completely) change the colors in the EGA/VGA palette with setpalette. On a CGA, you can only change the first entry in the palette (colornum equals 0, the background color) with a call to setpalette.
The color parameter passed to setpalette can be represented by symbolic constants which are defined in graphics.h.
Name | Value |
BLACK | 0 |
BLUE | 1 |
GREEN | 2 |
CYAN | 3 |
RED | 4 |
MAGENTA | 5 |
BROWN | 6 |
LIGHTGRAY | 7 |
DARKGRAY | 8 |
LIGHTBLUE | 9 |
LIGHTGREEN | 10 |
LIGHTCYAN | 11 |
LIGHTRED | 12 |
LIGHTMAGENTA | 13 |
YELLOW | 14 |
WHITE | 15 |
In the windows version, changing the palette effects only future drawing. Currently drawn pixels do not change their color when the palette changes (no "palette animation").
/* setpalette example */ #include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> int main(void) { /* request autodetection */ int gdriver = DETECT, gmode, errorcode; int color, maxcolor, ht; int y = 10; char msg[80]; /* initialize graphics and local variables */ initgraph(&gdriver, &gmode, ""); /* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) { /* an error occurred */ printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ } maxcolor = getmaxcolor(); ht = 2 * textheight("W"); /* display the default colors */ for (color=1; color<=maxcolor; color++) { setcolor(color); sprintf(msg, "Color: %d", color); outtextxy(1, y, msg); y += ht; } /* wait for a key */ getch(); /* black out the colors one by one */ for (color=1; color<=maxcolor; color++) { setpalette(color, BLACK); getch(); } /* clean up */ closegraph(); return 0; }