[comp.windows.x] COLORMAP

paul@amos.ling.ucsd.edu (Paul Smith) (10/08/87)

		Does anyone have a color map for X on the Sun which which 
	simulates the normal spectrum?  I would  like to have a contiguous 
	map which I could map low values to to darker colors, and higher 
	values to brighter colors.  This is easy to do with any two 
	(R, G, or B) colors, but what is the correct mixture using all three?  

					Paul Smith


		Internet: 	paul@amos.ling.ucsd.edu
		UUCP:		...ucbvax!sdcsvax!amos!paul

slg3x@cc.usu.edu (04/09/91)

Hi X-folks, 

Could you take a look my portion of codes? I can not draw the color I want; I
just got all "white" color. Did I make some mistake in somewhere? I wonder I 
didn't create a correct colormap. I used the following method to create pallete
(colormap). Does it has anything wrong? Please mail to me directly. Thanks in
advance.

Kchen

kchen@nit.cs.usu.edu
--------------------------------------------------------------------------- 
  vTemplate.screen = myscreen;
  vTemplate.colormap_size = 256;
  vTemplate.depth = 8;
  visualList = XGetVisualInfo (mydisplay, VisualScreenMask | VisualDepthMask,
                                &vTemplate, &visualsMatched);
  if ((visualsMatched == 0) && (visualList != NULL))
  {
      printf("FATAL ERROR\n");
      exit(0);
  }

  /*
    Set up window attributes
  */
  attributes.background_pixel = mybackground;
  attribute_mask              = CWBackPixel | CWBorderPixel |
                                CWEventMask;
  /*
    colormap creation
  */
  colormap1 = XCreateColormap (mydisplay, RootWindow(mydisplay, myscreen),
                               visualList[0].visual, AllocNone);

  /* allocate four colors in palette and each color has 65 indexes */
  if (XAllocColorCells(mydisplay, colormap1, True, NULL, 0, cells, 256))
  {
     /* pink */
     color[0].red = 62207; color[0].green = 9; color[0].blue = 8351;
     color[0].flags = DoRed | DoGreen | DoBlue;
     for (i = 0; i < 65; i++)
     {
         color[i].pixel = cells[i];
         color[i].red -= 971.984375;
         color[i].green -= 0.140625;
         color[i].blue -= 130.484375;
         color[i].flags = DoRed | DoGreen | DoBlue;

     }
     ...
     ...
     ...
     color[193].red = 2047; color[193].green = 65535; color[193].blue = 17477;
     color[193].flags = DoRed | DoGreen | DoBlue;
     for (i = 193; i < 256; i++)
     {
        color[i].pixel = cells[i];
        color[i].red -=  31.984375;
        color[i].green -= 1023.9844;
        color[i].blue -= 273.078125;
        color[i].flags = DoRed | DoGreen | DoBlue;
      }
      XStoreColors(mydisplay, colormap1, color, 256);*/
      XSetWindowColormap(mydisplay, mywindow, colormap1);
      XFree(visualList);
  }
  else
     printf("Warnning: Couldn't allocate color cells\n");
  ...
  ...
  ..
  /* test what's the color looking */.
  for (i = 0; i < 256; i++)
  {
      XSetForeground(mydisplay, mygc, color[i].pixel);
      for (k = 0; k < 3; k++)
          for (j = 0; j < 256; j++)
              XDrawPoint(mydisplay, mywindow, mygc, m+k, j);
      m += 3;
  }

marra@samuel.enet.dec.com (Dave Marra) (04/10/91)

A couple of things:

First, you never installed the colormap that you created:

Second, .red, .green, and .blue are unsigned shorts, not floats.

Beyond that I can't see anything else violently wrong.
However, I don't recommend creating your own colormap 
unless you like to see things go technicolor when
your colormap is installed.

						.dave.