在Java中为图像使用自定义颜色映射

在Java中为图像使用自定义颜色映射,java,graphics,image,jpeg,Java,Graphics,Image,Jpeg,我有一个关于通过索引进行颜色映射的问题 我尝试了在上找到的代码 它工作得很好,但我试图加载一个自定义图像jpeg映射到我自己的彩色地图,但它没有工作的权利。我只看到在白色背景上画了一堆绿色和蓝色像素。 我的自定义颜色映射方法如下: public void inintByteArrays() { double[][] c = // basic color map { { 0.0000, 0.0000, 0.5625 }, { 0.0000, 0.0000, 0.6250 }, {

我有一个关于通过索引进行颜色映射的问题

我尝试了在上找到的代码

它工作得很好,但我试图加载一个自定义图像jpeg映射到我自己的彩色地图,但它没有工作的权利。我只看到在白色背景上画了一堆绿色和蓝色像素。 我的自定义颜色映射方法如下:

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);
   }
  }
我的问题是,我如何使用我的彩色地图为任何图像,我想加载和地图在正确的方式。多谢各位


您好,蛋白质1。

JPEG不使用索引颜色,它们存储RGB值

你想达到什么效果?例如,您可以将JPEG转换为灰度,将灰度存储为索引,然后使用颜色映射

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);
   }
  }