Squiz Matrix  4.12.2
 All Data Structures Namespaces Functions Variables Pages
LookUpTable.java
1 package ij;
2 import java.awt.*;
3 import java.awt.image.*;
4 import ij.process.*;
5 
7 public class LookUpTable extends Object {
8  private int width, height;
9  private byte[] pixels;
10  private int mapSize = 0;
11  private ColorModel cm;
12  private byte[] rLUT, gLUT,bLUT;
13 
15  public LookUpTable(Image img) {
16  PixelGrabber pg = new PixelGrabber(img, 0, 0, 1, 1, false);
17  try {
18  pg.grabPixels();
19  cm = pg.getColorModel();
20  }
21  catch (InterruptedException e){};
22  getColors(cm);
23  }
24 
26  public LookUpTable(ColorModel cm) {
27  getColors(cm);
28  }
29 
30  void getColors(ColorModel cm) {
31  if (cm instanceof IndexColorModel) {
32  IndexColorModel m = (IndexColorModel)cm;
33  mapSize = m.getMapSize();
34  rLUT = new byte[mapSize];
35  gLUT = new byte[mapSize];
36  bLUT = new byte[mapSize];
37  m.getReds(rLUT);
38  m.getGreens(gLUT);
39  m.getBlues(bLUT);
40  }
41  }
42 
43  public int getMapSize() {
44  return mapSize;
45  }
46 
47  public byte[] getReds() {
48  return rLUT;
49  }
50 
51  public byte[] getGreens() {
52  return gLUT;
53  }
54 
55  public byte[] getBlues() {
56  return bLUT;
57  }
58 
59  public ColorModel getColorModel() {
60  return cm;
61  }
62 
66  public boolean isGrayscale() {
67  boolean isGray = true;
68 
69  if (mapSize < 256)
70  return false;
71  for (int i=0; i<mapSize; i++)
72  if ((rLUT[i] != gLUT[i]) || (gLUT[i] != bLUT[i]))
73  isGray = false;
74  return isGray;
75  }
76 
77  public void drawColorBar(Graphics g, int x, int y, int width, int height) {
78  if (mapSize == 0)
79  return;
80  ColorProcessor cp = new ColorProcessor(width, height);
81  double scale = 256.0/mapSize;
82  for (int i = 0; i<256; i++) {
83  int index = (int)(i/scale);
84  cp.setColor(new Color(rLUT[index]&0xff,gLUT[index]&0xff,bLUT[index]&0xff));
85  cp.moveTo(i,0); cp.lineTo(i,height);
86  }
87  g.drawImage(cp.createImage(),x,y,null);
88  g.setColor(Color.black);
89  g.drawRect(x, y, width, height);
90  }
91 
92  public void drawUnscaledColorBar(ImageProcessor ip, int x, int y, int width, int height) {
93  ImageProcessor bar = null;
94  if (ip instanceof ColorProcessor)
95  bar = new ColorProcessor(width, height);
96  else
97  bar = new ByteProcessor(width, height);
98  if (mapSize == 0) { //no color table; draw a grayscale bar
99  for (int i = 0; i < 256; i++) {
100  bar.setColor(new Color(i, i, i));
101  bar.moveTo(i, 0); bar.lineTo(i, height);
102  }
103  }
104  else {
105  for (int i = 0; i<mapSize; i++) {
106  bar.setColor(new Color(rLUT[i]&0xff, gLUT[i]&0xff, bLUT[i]&0xff));
107  bar.moveTo(i, 0); bar.lineTo(i, height);
108  }
109  }
110  ip.insert(bar, x,y);
111  ip.setColor(Color.black);
112  ip.drawRect(x-1, y, width+2, height);
113  }
114 
115  public static ColorModel createGrayscaleColorModel(boolean invert) {
116  byte[] rLUT = new byte[256];
117  byte[] gLUT = new byte[256];
118  byte[] bLUT = new byte[256];
119  if (invert)
120  for(int i=0; i<256; i++) {
121  rLUT[255-i]=(byte)i;
122  gLUT[255-i]=(byte)i;
123  bLUT[255-i]=(byte)i;
124  }
125  else {
126  for(int i=0; i<256; i++) {
127  rLUT[i]=(byte)i;
128  gLUT[i]=(byte)i;
129  bLUT[i]=(byte)i;
130  }
131  }
132  return(new IndexColorModel(8, 256, rLUT, gLUT, bLUT));
133  }
134 
135 }
136