views:

81

answers:

1

Hi everyone! I've got a question concering a colormapping via index.

I tried this code found on

http://www.podgoretsky.pri.ee/ftp/Docs/Java/Tricks%20of%20the%20Java%20Programming%20Gurus/ch12.htm

// Gradient.java
// Imports
import java.applet.Applet;
import java.awt.*;
import java.awt.image.*;

public class Gradient extends Applet {
  final int colors = 32;
  final int width = 200;
  final int height = 200;
  Image img;

  public void init() {
    // Create the color map
    byte[] rbmap = new byte[colors];
    byte[] gmap = new byte[colors];
    for (int i = 0; i < colors; i++)
      gmap[i] = (byte)((i * 255) / (colors - 1));

    // Create the color model
    int bits = (int)Math.ceil(Math.log(colors) / Math.log(2));
    IndexColorModel model = new IndexColorModel(bits, colors,
      rbmap, gmap, rbmap);

    // Create the pixels
    int pixels[] = new int[width * height];
    int index = 0;
    for (int y = 0; y < height; y++)
      for (int x = 0; x < width; x++)
        pixels[index++] = (x * colors) / width;

    // Create the image
    img = createImage(new MemoryImageSource(width, height, model,
      pixels, 0, width));
  }

  public void paint(Graphics g) {
    g.drawImage(img, 0, 0, this);
  }
}

It worked great but I tried to load a custom image jpeg mapped on my own colormap but it didnt work right. I saw only a bunch of green and blue pixels drawn on a white background. My custom color map method here:

public void inintByteArrays() {
  double[][] c = // basic color map
  { { 0.0000, 0.0000, 0.5625 }, { 0.0000, 0.0000, 0.6250 },
    { 0.0000, 0.0000, 0.6875 }, { 0.0000, 0.0000, 0.6875 },
    { 0.0000, 0.0000, 0.7500 }, { 0.0000, 0.0000, 0.8125 },
    { 0.0000, 0.0000, 0.8750 }, { 0.0000, 0.0000, 0.9375 },
    { 0.0000, 0.0000, 1.0000 }, { 0.0000, 0.0625, 1.0000 },
    { 0.0000, 0.1250, 1.0000 }, { 0.0000, 0.1875, 1.0000 },
    { 0.0000, 0.2500, 1.0000 }, { 0.0000, 0.3125, 1.0000 },
    { 0.0000, 0.3750, 1.0000 }, { 0.0000, 0.4375, 1.0000 },
    { 0.0000, 0.5000, 1.0000 }, { 0.0000, 0.5625, 1.0000 },
    { 0.0000, 0.6250, 1.0000 }, { 0.0000, 0.6875, 1.0000 },
    { 0.0000, 0.7500, 1.0000 }, { 0.0000, 0.8125, 1.0000 },
    { 0.0000, 0.8750, 1.0000 }, { 0.0000, 0.9375, 1.0000 },
    { 0.0000, 1.0000, 1.0000 }, { 0.0625, 1.0000, 0.9375 },
    { 0.1250, 1.0000, 0.8750 }, { 0.1875, 1.0000, 0.8125 },
    { 0.2500, 1.0000, 0.7500 }, { 0.3125, 1.0000, 0.6875 },
    { 0.3750, 1.0000, 0.6250 }, { 0.4375, 1.0000, 0.5625 },
    { 0.5000, 1.0000, 0.5000 }, { 0.5625, 1.0000, 0.4375 },
    { 0.6250, 1.0000, 0.3750 }, { 0.6875, 1.0000, 0.3125 },
    { 0.7500, 1.0000, 0.2500 }, { 0.8125, 1.0000, 0.1875 },
    { 0.8750, 1.0000, 0.1250 }, { 0.9375, 1.0000, 0.0625 },
    { 1.0000, 1.0000, 0.0000 }, { 1.0000, 0.9375, 0.0000 },
    { 1.0000, 0.8750, 0.0000 }, { 1.0000, 0.8125, 0.0000 },
    { 1.0000, 0.7500, 0.0000 }, { 1.0000, 0.6875, 0.0000 },
    { 1.0000, 0.6250, 0.0000 }, { 1.0000, 0.5625, 0.0000 },
    { 1.0000, 0.5000, 0.0000 }, { 1.0000, 0.4375, 0.0000 },
    { 1.0000, 0.3750, 0.0000 }, { 1.0000, 0.3125, 0.0000 },
    { 1.0000, 0.2500, 0.0000 }, { 1.0000, 0.1875, 0.0000 },
    { 1.0000, 0.1250, 0.0000 }, { 1.0000, 0.0625, 0.0000 },
    { 1.0000, 0.0000, 0.0000 }, { 0.9375, 0.0000, 0.0000 },
    { 0.8750, 0.0000, 0.0000 }, { 0.8125, 0.0000, 0.0000 },
    { 0.7500, 0.0000, 0.0000 }, { 0.6875, 0.0000, 0.0000 },
    { 0.6250, 0.0000, 0.0000 }, { 0.5625, 0.0000, 0.0000 },
    { 0.5000, 0.0000, 0.0000 } };

  for (int i = 0; i < c.length; i++) {

   for (int j = 0; j < c[i].length; j++) {
    if (j == 0)
     r[i] = (byte) ((byte) c[i][j]*255);
    if (j == 1)
     g[i] = (byte) ((byte) c[i][j]*255);
    if (j == 2)
     b[i] = (byte) ((byte) c[i][j]*255);
   }
  }

My question is how I can use my colormap for any image I want to load and map in the right way. Thank you very much!

Greetings, protein1.

A: 

Jpegs do not use indexed colors, they store RGB values.

What effect do you want to achieve? You could for instance convert the JPEG into grayscale, store the grayscale as indexed, then use your color mapping.

Roman Zenka