Converting an indexed image into an RGB image
			
			
		
		
		
			
			
				
				Anonym
				
			
		
			Here’s an example of how to convert an indexed image into an RGB image. Though they require more memory, I often find RGB images easier to work with because I don’t have to deal with color tables: I invariably forget to read the color table of an indexed image or pass the color table to a display routine in IDL. Start by reading an indexed image from a PNG file in IDL’s examples/data directory:
  IDL> f = file_which('africavlc.png') IDL> img = read_image(f, r, g, b) IDL> help, img, r, g, b IMG BYTE = Array[540, 560] R BYTE = Array[256] G BYTE = Array[256] B BYTE = Array[256] The variable img is a two-dimensional array. The value of each element of img is mapped as an index into the arrays r, g and b; this is what gives each pixel of the image its RGB color[1]. Visualize the image with:
  IDL> i_idx = image(img, rgb_table=[[r],[g],[b]])
 To create a single RGB image from these four arrays, perform the following array concatentation[2]:
  IDL> rgb = [[[r[img]]], [[g[img]]], [[b[img]]]] IDL> help, rgb RGB BYTE = Array[540, 560, 3]
 This makes an RGB image with band sequential interleaving. Use TRANSPOSE to convert it to a pixel-interleaved RGB image:
  IDL> rgb = transpose(rgb, [2,0,1]) IDL> help, rgb RGB BYTE = Array[3, 540, 560]
 View the result with:
  IDL> i_rgb = image(rgb)
 Last, write the RGB image to a new PNG file:
  IDL> write_png, 'africavlc_rgb.png', rgb
 
 
 [1] For example, the value of 
img at [200,300] is 65. The RGB triple formed by [
r[65], 
g[65], 
b[65]] is [50, 145, 19], the greenish color you see at this location in 
img.
  [2] The values of 
img are being used as subscripts into the arrays 
r, 
g and 
b, so 
r[img] is a 540 x 560 array of 8-bit intensities in the red channel. Doing the same for 
g and 
b provides the intensities for the green and blue channels. (This is the inverse of 
[1]!) Experiment with 
img as a simple 2 x 2 array of colors to see how this works.