1 #include "mrilib.h"
2 
3 /*----- set up an RGB color table, with ngray level of gray,
4         and a color "cube" nrr X ngg X nbb color cells on a side;
5         total number of cells is ngray+nrr*ngg*nbb-1 [05 Oct 2004] -----*/
6 
mri_colorsetup(int ngray,int nrr,int ngg,int nbb)7 MRI_IMAGE * mri_colorsetup( int ngray , int nrr , int ngg , int nbb )
8 {
9    MRI_IMAGE *im ;
10    rgbyte *ar ;
11    int rr,gg,bb , nn ;
12    float rac,gac,bac ;
13 
14    im = mri_new( ngray + nrr*ngg*nbb - 1 , 1 , MRI_rgb ) ;
15    ar = (rgbyte *) MRI_RGB_PTR(im) ;
16 
17    gac = 255.9f / ngray ; nn = 0 ;          /* actually, ngray+1 levels */
18    for( gg=0 ; gg <= ngray ; gg++,nn++ ){
19      ar[nn].r = ar[nn].g = ar[nn].b = (byte)(gac*gg) ;
20    }
21 
22    rac = 255.9f/(nrr-1) ; gac = 255.9f/(ngg-1) ; bac=255.9f/(nbb-1) ;
23 
24    for( bb=0 ; bb < nbb ; bb++ ){    /* skip the all black and */
25     for( gg=0 ; gg < ngg ; gg++ ){   /* the all white colors   */
26       for( rr=0 ; rr < nrr ; rr++ ){
27         if( rr==0     && gg==0     && bb==0     ) continue ;
28         if( rr==nrr-1 && gg==ngg-1 && bb==nbb-1 ) continue ;
29         ar[nn].r = (byte)(rac*rr) ;
30         ar[nn].g = (byte)(gac*gg) ;
31         ar[nn].b = (byte)(bac*bb) ; nn++ ;
32    } } }
33 
34    return im ;
35 }
36