У меня есть вопрос о создании цветовой карты с помощью индекса.
Я попробовал этот код, найденный на
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);
}
}
Это работало замечательно, но я пытался загрузить нестандартное изображение, отображенное в формате 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.