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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
| public class Histogrammebilineaire extends JPanel {
private final BufferedImage matrice;
private final Max max;
public Histogrammebilineaire(BufferedImage monImage, BufferedImage monImage2, int nbCases, int largeurCase) {
int largeur = Math.min(nbCases, Math.min(monImage.getWidth(), monImage.getWidth()));
int hauteur = Math.min(nbCases, Math.min(monImage.getHeight(), monImage2.getHeight()));
int largeurGrille = largeur * largeurCase;
int hauteurGrille = hauteur * largeurCase;
matrice = new BufferedImage(largeurGrille, hauteurGrille, BufferedImage.TYPE_INT_RGB);
Graphics2D g = matrice.createGraphics();
int max=-1;
int imax=-1;
int jmax=-1;
for (int i = 0; i < largeur; i++) {
for (int j = 0; j < hauteur; j++) {
int pixel = monImage.getRGB(i, j);
int gray = ((pixel >> 16) & 0xFF) >> 3;
int pixel2 = monImage2.getRGB(i, j);
int gray2 = ((pixel2 >> 16) & 0xFF) >> 3;
int valeur = (gray + gray2) << 2;
if ( valeur>max ) {
max=valeur;
imax=i;
jmax=j;
}
g.setColor(new Color(valeur, valeur, valeur));
g.fillRect(i * largeurCase, j * largeurCase, largeurCase, largeurCase); // remplissage
// (fill)
}
}
g.setColor(Color.WHITE);
for (int i = 0; i < largeur; i++) {
g.drawLine(i * largeurCase, 0, i * largeurCase, hauteurGrille);
}
for (int i = 0; i < hauteur; i ++) {
g.drawLine(0, i*largeurCase, largeurGrille, i*largeurCase);
}
g.dispose();
this.max = new Max(max, imax, jmax);
setPreferredSize(new Dimension(largeurGrille,hauteurGrille));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(matrice, 0, 0, this);
}
public Max getMax() {
return max;
}
public static class Max {
private final int max;
private final int x;
private final int y;
public Max(int max, int x, int y) {
this.max=max;
this.x=x;
this.y=y;
}
public int getMax() {
return max;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
public static void main(String[] arg) {
try {
BufferedImage image1 = ImageIO.read(new File("C:/Users/Joël/Pictures/suricate.png"));
try {
BufferedImage image2 = ImageIO.read(new File("C:/Users/Joël/Pictures/Google Talk/Alien 1.bmp"));
JFrame fenetre = new JFrame("Histogramme Bilinéaire");
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Histogrammebilineaire panneau = new Histogrammebilineaire(image1, image2, 32, 8);
panneau.setBackground(Color.WHITE);
fenetre.add(panneau);
fenetre.pack();
fenetre.setLocationRelativeTo(null);
fenetre.setVisible(true);
JFrame fimagette=new JFrame();
fimagette.setTitle("Imagette");
fimagette.setBounds(365,200,500,500);
JLabel jre=new JLabel();
jre.setText("La valeur max est " + panneau.getMax().getMax() + " situé en " + panneau.getMax().getX() + ", " + panneau.getMax().getY());
fimagette.add(jre);
fimagette.pack();
fimagette.setVisible(true);
} catch (IOException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Problème pour charger la seconde image");
}
} catch (IOException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Problème pour charger la première image");
}
}
} |