1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| public class Zone extends JComponent {
private BufferedImage image, histogramme;
private final int largeur = 256;
private final int hauteur = 200;
private Graphics2D dessin;
private final int[] rouge = new int[256];
private final int[] vert = new int[256];
private final int[] bleu = new int[256];
public Zone() {
try{
image = ImageIO.read(new File("1a.jpg"));
récupérerRVB();
tracerHistogrammes();}
catch (IOException ee){}}
protected void paintComponent(Graphics surface) {
surface.drawImage(image, 0, 0, null);
surface.drawImage(histogramme, (this.getWidth()-largeur)/2, (this.getHeight()-hauteur)/2, null);
}
private void récupérerRVB() {
Raster trame = image.getRaster();
int[] rgb = new int[3];
int maximum = 0;
for (int y=0; y<image.getHeight(); y++)
for (int x=0; x<image.getWidth(); x++) {
trame.getPixel(x, y, rgb);
rouge[rgb[0]]++;
vert[rgb[1]]++;
bleu[rgb[2]]++;
}
}
private void tracerHistogrammes() {
histogramme = new BufferedImage(largeur, hauteur, BufferedImage.TYPE_INT_ARGB);
dessin = histogramme.createGraphics();
Rectangle2D rectangle = new Rectangle2D.Double(0, 0, largeur-1, hauteur-1);
dessin.draw(rectangle);
dessin.setPaint(new Color(1F, 1F, 1F, 0.2F));
dessin.fill(rectangle);
changerAxes();
dessin.setPaint(new Color(1F, 0F, 0F, 0.4F));
tracerHistogramme(rouge);
dessin.setPaint(new Color(0F, 1F, 0F, 0.4F));
tracerHistogramme(vert);
dessin.setPaint(new Color(0F, 0F, 1F, 0.4F));
tracerHistogramme(bleu);
}
private void changerAxes() {
dessin.translate(0, hauteur);
double surfaceImage = image.getWidth()*image.getHeight();
double surfaceHistogramme = histogramme.getWidth()*histogramme.getHeight();
dessin.scale(1, -surfaceHistogramme/surfaceImage/3.7);
}
private void tracerHistogramme(int[] couleur) {
for (int i=0; i<255; i++)
dessin.drawLine(i, 0, i, couleur[i]);
}
public static void main(String[] argv) {
Zone fenetre = new Zone();
fenetre.setVisible(true);
fenetre.setSize(100,100);
}
} |
Partager