Hi Karl,
The preferred method in this case is to use a palette in ZoneTextureMode (in as this will decrease the amount of data transfer to the video board):
surface.FillMode = SurfaceFillMode.ZoneTexture;
Regarding the palette - the following code shows how to create a custom palette:
surface.FillMode = SurfaceFillMode.ZoneTexture;
surface.Palette.Clear();
surface.Palette.Mode = PaletteMode.Custom;
surface.Palette.Add(0, Color.Red);
surface.Palette.Add(0.20, Color.Blue);
surface.Palette.Add(0.40, Color.Green);
surface.Palette.Add(1, Color.Yellow);
in this palette values that fall in the range [0, 0.2] will be colored red, [0.2, 0.4] Blue and so on.
Hope this helps - let us know if you have any questions.
Best Regards,
Nevron Support Team