Bonjour, débutant en Java dans le cadre de mes études, nous devon réaliser un projet de codage/décodage de texte (entre autre) dans une image en modifiant le bit de point faible.
Le codage fonctionne mais le décodage me pose problème. Lorsque je test la méthode à partir de l'interface graphique, il ne se passe rien et l'interface plante sévèrement (il ne répond plus) alors que java continue de s’exécuter sans problème et je n'arrive pas à comprendre pourquoi (d'autant plus que je suis obligé d'interrompre le run et que je n'ai pas de message d'erreur).
j'ai un interface graphique qui appel la méthode de décodage de la manière suivante
ladite méthode est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 private void jComboBox3ActionPerformed(java.awt.event.ActionEvent evt) { if(evt.getSource()==jComboBox3){ String event = (String)jComboBox3.getSelectedItem(); BufferedImage image = null; try { image = ImageIO.read(new File(jTextField1.getText()+".png")); } catch (IOException ex) { Logger.getLogger(Interface.class.getName()).log(Level.SEVERE, null, ex); } MatricePixels test = new MatricePixels(image); switch (event){ case "trouver texte caché" : String message = test.extraireTexteCaché(image); // jTextArea1.setText("coucou"); jTextArea2.setText(message); break;
avec hauteur et largeur la hauteur et la largeur de la Buffered image (getHigh etc) et tabImage une matrice regroupant les pixels de l'image de la façon suivante (tout ceci en variables globales)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public String extraireTexteCaché(BufferedImage image) { // fait planter le bazar ? int tableauLigne[]; tableauLigne = new int[hauteur*largeur]; // on remet les pixels sous forme //d'un unique tableau en une ligne pour éviter les problèmes de caractères cachés sur plusieurs ligne for (int j = 0; j < hauteur; j++) { for (int i = 0; i < largeur; i++) { tableauLigne[i]= tabImage[i][j]; // System.out.println(tableauLigne[i]); } } String message = ""; int lettre = 0; for(int a=0; a<tableauLigne.length;a++){ for(int b=0; b<8;b++){ int dernier = tableauLigne[a]&1; lettre = lettre*2 + dernier;// décalage des bits déja inérés vers la gauche et ajout du bit extrait } message =message+(char)lettre; } return message; }
merci pour votre aide !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 this.tabImage = new int[largeur][hauteur]; for (int j = 0; j < this.hauteur; j++) { for (int i = 0; i < this.largeur; i++) { this.tabImage[i][j] = image.getRGB(i, j); } }
Partager