[JAVA] Convertion image couleur en nuance de gris
Résolu/Fermé
A voir également:
- [JAVA] Convertion image couleur en nuance de gris
- Waptrick java football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Image iso - Guide
- Somme si couleur - Guide
- Jeux java itel football - Télécharger - Jeux vidéo
6 réponses
Utilisateur anonyme
26 févr. 2013 à 16:29
26 févr. 2013 à 16:29
Au cas ou tu vois tjr pas mon msg, poste l'intégralité de ton code stp.
import java.awt.image.BufferedImage; import java.awt.image.DataBufferByte; import java.awt.image.WritableRaster; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; /** * * @author Proprietaire */ public class imageIsn extends javax.swing.JFrame { /** * Creates new form NewJFrame */ public imageIsn() { initComponents(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); jTextField1 = new javax.swing.JTextField(); jButton1 = new javax.swing.JButton(); jLabel3 = new javax.swing.JLabel(); jButton2 = new javax.swing.JButton(); jButton3 = new javax.swing.JButton(); jSlider1 = new javax.swing.JSlider(); jLabel4 = new javax.swing.JLabel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jLabel1.setIcon(new javax.swing.ImageIcon("logo_court.gif")); // NOI18N jLabel1.setText("jLabel1"); jLabel2.setText("Entrer le nom de l'image avec l'extention bmp ou png"); jTextField1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jTextField1ActionPerformed(evt); } }); jButton1.setText("Negatif"); jButton1.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jButton1MouseClicked(evt); } }); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jButton2.setText("Noir & Blanc"); jButton2.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jButton2MouseClicked(evt); } }); jButton3.setText("Augmenter contraste"); jButton3.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jButton3MouseClicked(evt); } }); jSlider1.setMaximum(127); jSlider1.setMinimum(-128); jLabel4.setText("Pour une photo en N&B"); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(28, 28, 28) .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 148, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() .addGap(174, 174, 174) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 411, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 229, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 301, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 135, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() .addGap(69, 69, 69) .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 141, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(49, 49, 49) .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 136, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(46, 46, 46) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jSlider1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))))) .addContainerGap(86, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(20, 20, 20) .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(26, 26, 26) .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 11, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jButton1) .addComponent(jButton2) .addComponent(jButton3)) .addGap(18, 18, 18) .addComponent(jSlider1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(30, 30, 30)) ); pack(); }// </editor-fold>//GEN-END:initComponents private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextField1ActionPerformed // TODO add your handling code here: }//GEN-LAST:event_jTextField1ActionPerformed private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton1MouseClicked // TODO add your handling code here: }//GEN-LAST:event_jButton1MouseClicked private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed // TODO add your handling code here: if (jTextField1.getText().equals("")) { afficheLabel("Il faut saisir une image"); } else { transImage(); } }//GEN-LAST:event_jButton1ActionPerformed private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton2MouseClicked // TODO add your handling code here: noirEtBlanc(); }//GEN-LAST:event_jButton2MouseClicked private void jButton3MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jButton3MouseClicked // TODO add your handling code here: augmenteContraste(); }//GEN-LAST:event_jButton3MouseClicked private void afficheLabel(String message) { jLabel3.setText(message); } public static byte[] imageBytes (BufferedImage im) { //Un raster est un tableau qui correspond au pixel WritableRaster raster=im.getRaster(); //Décompose le raster en tableau de dataBuffer Octet DataBufferByte buffer = (DataBufferByte)raster.getDataBuffer(); //renvoie en tableau d'octet qui semble être directememnt lié à l'image, donc le modifier modifie l'image. return buffer.getData(); } //Fonction qui lit l'image private BufferedImage loadImage(String imFnm) { BufferedImage im = null; try { im = ImageIO.read( new File(imFnm) ); jLabel3.setText("Lecture " + imFnm); } catch (IOException e) { jLabel3.setText("Impossibilité de lire l'image " + imFnm); } return im; } // end of loadImage() /** * @param args the command line arguments */ public static void main(String args[]) { /* * Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* * If Nimbus (introduced in Java SE 6) is not available, stay with the * default look and feel. For details see * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(imageIsn.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(imageIsn.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(imageIsn.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(imageIsn.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* * Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new imageIsn().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JButton jButton3; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JSlider jSlider1; private javax.swing.JTextField jTextField1; // End of variables declaration//GEN-END:variables static final File outputfile = new File("saved.png"); static final File outputfile2 = new File("saved2.png"); static final File outputfile3 = new File("saved3.png"); /* * -----------------------------------------o-o------------------------------------------------- * C'est votre partie * -----------------------------------------o-o------------------------------------------------- */ //Procédure qui transforme l'image en négatif private void transImage() { //déclaration des variables int longIm, largIm; byte[] tabPixels; //récupération de l'image dont le nom est écrit dans le champ jTextField1 BufferedImage ima = loadImage(jTextField1.getText()); longIm=ima.getHeight(); largIm=ima.getWidth(); //création du tableau d'octets constituant chaque pixel tabPixels=imageBytes(ima); /* * -----------------------------------------o-o------------------------------------------------- * -----------------------------------------o-o------------------------------------------------- */ System.out.println(tabPixels.length); int i; for (i=0; i<tabPixels.length; i++) { tabPixels[i]= (byte)(255-(tabPixels[i])); /*System.out.println(tabPixels[i]);*/ } //Sauvegarde l'image dans le fichier saved.png try { ImageIO.write(ima, "png", outputfile); jLabel3.setText("saved.png créée"); } catch (IOException e) { // TODO Auto-generated catch block jLabel3.setText("Problème dans l'écriture de l'image."); } } //procédure qui transforme en noir et blanc public void noirEtBlanc() { int longIm, largIm; byte[] tabPixels; BufferedImage ima = loadImage(jTextField1.getText()); longIm=ima.getHeight(); largIm=ima.getWidth(); tabPixels=imageBytes(ima); /* * -----------------------------------------o-o------------------------------------------------- * * -----------------------------------------o-o------------------------------------------------- */ System.out.println(tabPixels.length); int i; for (i=0; i<tabPixels.length; i=i+3) { tabPixels[i]= (byte) ((tabPixels[i]+tabPixels[i+1]+tabPixels[i+2])/3); /*System.out.println(tabPixels[i]);*/ } //Sauvegarde l'image dans le fichier saved2.png try { ImageIO.write(ima, "png", outputfile2); jLabel3.setText("saved2.png créée"); } catch (IOException e) { // TODO Auto-generated catch block jLabel3.setText("Problème dans l'écriture de l'image."); } } //procédure qui augmente le contraste d'une image en dégradé de gris private void augmenteContraste() { /* * -----------------------------------------o-o------------------------------------------------- * Ecrivez le code ici * -----------------------------------------o-o------------------------------------------------- */ } }
Utilisateur anonyme
26 févr. 2013 à 16:55
26 févr. 2013 à 16:55
OK. Donc la premiere chose a savoir, c'est que les valeur de R G et B dans une image de niveau de gris, sont identiques. C'est à dire que dans ton cas :
tabpix[0] doit etre egal a tabpix[1] et tabpix[2] ce qui n'est pas le cas. Tu modifie seulement la premiere valeure pour chaque pixel (tab[0],tab[3]) car ton i saute de 3 a chaque tour.
Il te suffit d'ajouter pour chaque pixel que :
bleu = rouge;
vert = rouge;
C'est a dire :
for (i=0; i<tabPixels.length; i=i+3)
{
tabPixels[i]= (byte) ((tabPixels[i]+tabPixels[i+1]+tabPixels[i+2])/3);
tabPixels[i+1]=tabPixels[i];
tabPixels[i+2]=tabPixels[i];
/*System.out.println(tabPixels[i]);*/
}
Ainsi, a chaque tour de boucle, tu assigne la meme et bonne valeur dans R G et B (i, i+1, i+2).
Normalement ca devrait marcher.
tabpix[0] doit etre egal a tabpix[1] et tabpix[2] ce qui n'est pas le cas. Tu modifie seulement la premiere valeure pour chaque pixel (tab[0],tab[3]) car ton i saute de 3 a chaque tour.
Il te suffit d'ajouter pour chaque pixel que :
bleu = rouge;
vert = rouge;
C'est a dire :
for (i=0; i<tabPixels.length; i=i+3)
{
tabPixels[i]= (byte) ((tabPixels[i]+tabPixels[i+1]+tabPixels[i+2])/3);
tabPixels[i+1]=tabPixels[i];
tabPixels[i+2]=tabPixels[i];
/*System.out.println(tabPixels[i]);*/
}
Ainsi, a chaque tour de boucle, tu assigne la meme et bonne valeur dans R G et B (i, i+1, i+2).
Normalement ca devrait marcher.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
KX
Messages postés
16734
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 avril 2024
3 015
26 févr. 2013 à 17:08
26 févr. 2013 à 17:08
"Je vois écris qu'il y a une réponse mais elle n'apparait pas."
Le problème est réglé, je l'ai déplacé.
@MiGoK : lorsque l'on écrit un "commentaire de la question", celui-ci n'est pas visible par les utilisateurs non-membres (comme Radium par exemple). Il vaut donc mieux écrire des "réponses".
Au passage, je passe la discussion en résolue. ;-)
Le problème est réglé, je l'ai déplacé.
@MiGoK : lorsque l'on écrit un "commentaire de la question", celui-ci n'est pas visible par les utilisateurs non-membres (comme Radium par exemple). Il vaut donc mieux écrire des "réponses".
Au passage, je passe la discussion en résolue. ;-)
Modifié par MiGoK le 26/02/2013 à 16:17
26 févr. 2013 à 16:29
Faudrait que je donne tout le code du logiciel ??? ou la procédure de transformation en niveau de gris suffit ?
26 févr. 2013 à 16:31
26 févr. 2013 à 16:33
26 févr. 2013 à 16:39
ça c'est la procédure du niveau de gris