Я создал метод, который должен отображать гистограмму из изображения ... У меня есть двухмерный массив:
int[][] myHistogram=new int[colorComponentOfImage][bin256];
чем я начал читать информацию о пикселях и извлекать цвет следующим образом:
int pixel[]=new int[width*height];
myImage.getRGB(0,0,width,height,pv,0,width);
Теперь, как я могу заполнить массив цветами, которые я получаю из изображения ??? или я извлекаю неправильно цвета ??
спасибо заранее
p.s. это остальная часть кода (метод для заполнения массива гистограммы):
public void setHistogram(int[][] myHistogram) {
this.hist = myHistogram;
for (int i = 0; i < this.bin256; i++) {
for (int j = 0; j < this.colorcomponents; j++) {
this.max = (this.max > this.hist[j][i]) ? this.max : this.hist[j][i];
}
}
}
и это метод построения гистограммы:
public BufferedImage plotHistogram(int width, int height) {
BufferedImage image = null;
if (this.colorcomponents >= 3) {
/**
* extended RGB algorithm first channel:red second channel: green
* third channel: blue fourth channel: the alpha value is being
* ignored
*/
image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = image.createGraphics();
Polygon[] poly = new Polygon[3];
graphics.setColor(Color.white);
graphics.fillRect(0, 0, width, height);
/**
* only first three bands are used
*/
for (int i = 0; i < 3; i++) {
poly[i] = new Polygon();
if (i == RED) {
graphics.setColor(Color.red);
}
else if (i == GREEN) {
graphics.setColor(Color.green);
}
else if (i == BLUE) {
graphics.setColor(Color.blue);
}
float xInterval = (float) width / (float) bins;
float yInterval = (float) height / (float) max;
poly[i].addPoint(0, height);
for (int j = 0; j < bins; j++) {
int x = (int) ((float) j * xInterval);
int y = (int) ((float) this.hist[i][j] * yInterval);
poly[i].addPoint(x, height - y);
}
poly[i].addPoint(width, height);
graphics.fill(poly[i]);
}
Area red = new Area(poly[RED]);
Area green = new Area(poly[GREEN]);
Area blue = new Area(poly[BLUE]);
red.intersect(green);
green.intersect(blue);
blue.intersect(new Area(poly[0]));
graphics.setColor(new Color(255, 255, 0));
graphics.fill(red);
graphics.setColor(new Color(0, 255, 255));
graphics.fill(green);
graphics.setColor(new Color(255, 0, 255));
graphics.fill(blue);
graphics.setColor(Color.black);
blue.intersect(new Area(poly[2]));
graphics.fill(blue);
}
return image;
}
если я вызываю plotHistogram, массив Hist пуст ...