IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

Traitement d'image (sortir les pixel) - Marche


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3
    Par défaut Traitement d'image (sortir les pixel) - Marche
    Et voila une petit code qui marche !! résolu. merci à tous ceux qui mon aider.

    Ce code fait :
    - copie une image dans une matrice
    - refait une image à partir de la matrice
    - enregistre l'image sur le disque dure

    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
    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
    132
    133
    134
    135
    136
    137
     
    import java.applet.Applet;
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.BufferedOutputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
     
    import javax.swing.ImageIcon;
     
    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGEncodeParam;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;
     
    public class Main extends Applet {
    	private BufferedImage image2 = null;
     
    	public void init() {
    		// Création d'une image
    		Image image = getImage(getCodeBase(), "java.jpg");
    		// conversion Image en BufferedImage
    		BufferedImage imageBuff = toBufferedImage(image);
    		// conversion BufferedImage en tableau 3D
    		int[][][] imageArray = toArray(imageBuff);
    		// convertion tableau 3D en BufferedImage
    		this.image2 = toBufferedImage(imageArray);
     
    		creerImage(image2,"C:/monimage.jpg");
    	}
     
    	private BufferedImage toBufferedImage(Image image) {
    		/* On test si l'image n'est pas déja une instance de BufferedImage */
    		if (image instanceof BufferedImage) {
    			/* cool, rien à faire */
    			return (BufferedImage) image;
    		} else {
    			/* On s'assure que l'image est complètement chargée */
    			image = new ImageIcon(image).getImage();
     
    			/* On crée une BufferedImage et on copie l'image dedans */
    			BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
    			bufferedImage.getGraphics().drawImage(image,0,0,null);
    			return bufferedImage;
    		}
    	}
     
    	private BufferedImage toBufferedImage(int[][][] array) {
    		/* recup la taille de l'image */
    		int width = array.length;
    		int height = array[0].length;
     
    		/* On crée une BufferedImage et on copie les données dedans */
    		BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    		for (int y = 0; y < height; y++) {
    			for (int x = 0; x < width; x++) {
    				int rgb = (array[x][y][0]<<24) + (array[x][y][1]<<16) + (array[x][y][2]<<8) + (array[x][y][3]);
    				bufferedImage.setRGB(x, y, rgb);
    			}
    		}
    		return bufferedImage;
    	}
     
    	private int[][][] toArray(BufferedImage image) {
    		/* recup la taille de l'image */
    		int width = image.getWidth();
    		int height = image.getHeight();
    		/* creation du tableau */
    		int[][][] array = new int[width][height][4];
    		/* remplissage du tableau */
    		for (int y = 0; y < height; y++) {
    			for (int x = 0; x < width; x++) {
    				int rgb = image.getRGB(x, y);
    				array[x][y][0] = (rgb >> 24) & 0xFF;
    				array[x][y][1] = (rgb >> 16) & 0xFF;
    				array[x][y][2] = (rgb >> 8) & 0xFF;
    				array[x][y][3] = rgb & 0xFF;
    			}
    		}
     
    		/* test ce qu'il y a dans le tableaux
    		for (int y = 0; y < height; y++) {
    			for (int x = 0; x < width; x++) {
    				System.out.print("| "+array[x][y][0]+" "+array[x][y][1]+" "+array[x][y][2]+" "+array[x][y][3]);
    			}
    			System.out.println(" |");
    		}
    		*/
     
    		// pour le Rsa : rsa=(1E09*alpha)+(1E06*rouge)+(1E03*vert)+bleu
     
    		return array;
    	}
     
    	public void paint(Graphics gc) {
    		if (this.image2!=null)
    			gc.drawImage(this.image2, 0, 0, null);
    	}
     
    	public void creerImage(Image pict, String url){
     
    		try {
     
        	int imageWidth = pict.getWidth(null);
        	int imageHeight = pict.getHeight(null);
     
     
    	    // Dessine l'image dans le buffer
    	    BufferedImage monImage = new BufferedImage(imageWidth,
    	    imageHeight, BufferedImage.TYPE_INT_RGB);
        	Graphics2D graphics2D = monImage.createGraphics();
        	graphics2D.drawImage(pict, 0, 0, imageWidth, imageHeight, null);
        	graphics2D.dispose();
     
    		// Sauvegarde l'image dans le fichier output
        	System.out.println("Création du fichier ...");
        	BufferedOutputStream outBuffered = new BufferedOutputStream(new
        	FileOutputStream(url));
     
        	JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outBuffered);
        	JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(monImage);
     
     		param.setQuality(1.0f, true);
    		encoder.setJPEGEncodeParam(param);
     
        	// Encodage de l'image
        	encoder.encode(monImage);
        	// Fermeture du buffer
        	outBuffered.close();
     
    	    System.out.println("Encodage réussit, image crée.");
     
       		} catch( IOException e2 ) {	e2.printStackTrace(); }
     
        }
     
     
    }

  2. #2
    Membre actif
    Inscrit en
    Février 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 88
    Par défaut
    Bonjour,
    tu ne copie rien dans bufferedImage, tu n'utilises pas image passé en argument.

    Je te conseil de passer ton code au debuggueur c'est la meilleurs façon de voir ce qui se passe.

    Et enfin tes boucles ce limite à 30 px, mais tu l'as peut être fait expres


    Et de plus, tu retourne bufferedImage alors que tu as modifié image2....

    enfin bon....

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3
    Par défaut
    Justement, il n'y a aucun soucis dans le déboguer ( que j'utilise souvent ) et ouai, j'ai limité à 30 px, je mettre autre chose après.

  4. #4
    Membre émérite
    Avatar de kmdkaci
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 560
    Par défaut
    En utilsant ton code, j'ai eu cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    java.lang.UnsupportedOperationException: getGraphics() not valid for images created with createImage(producer)
    	at sun.awt.image.ToolkitImage.getGraphics(Unknown Source)
    	at Fenetre.toBufferedImage(Fenetre.java:51)
    	at Fenetre.init(Fenetre.java:16)
    	at sun.applet.AppletPanel.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)
    java.lang.UnsupportedOperationException: getGraphics() not valid for images created with createImage(producer)
    	at sun.awt.image.ToolkitImage.getGraphics(Unknown Source)
    	at Fenetre.toBufferedImage(Fenetre.java:51)
    	at Fenetre.init(Fenetre.java:16)
    	at sun.applet.AppletPanel.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)

  5. #5
    Membre actif
    Inscrit en
    Février 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 88
    Par défaut
    Justement, il n'y a aucun soucis dans le déboguer ( que j'utilise souvent ) et ouai, j'ai limité à 30 px, je mettre autre chose après.
    Oui je suis d'accord mais il y a aussi un pb fonctionnelle dans ton code.

    Tu charges une image dans une variable image et tu en fait rien apres
    Il faut décommenté ton code pour la copier dans BufferedImage

    puis la création de ton tableau doit fonctionner je pense...

    Ensuite tu créer une autre image et tu remets ton code ou tu copiais ton tableau dans cette image

    Cette image ensuite tu l'as copie dans une nouvelle bufferedImage (ou tu travail directement avec une bufferedImage je connais pas bien cette partie)

    et tu retournes le dernier bufferedImage

    Y voila
    Si tu veus être sur quand tu fais ton setColor inverse le rouge et le bleu par exemple....

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3
    Par défaut
    en fait, je suis ok avec mon code, jusqu'à la création du tableaux.

    La je veux créer une 2em images à partir du tableaux.
    Et afficher cette dernière dans l'applet.

    ( tu vas me dire ça sert à rien, se seront le même )
    ouai, mais comme ça je pourrais faire du traitement dans la matrice pour crypter l'image.

    Donc la question est, comment je peux créer une 2em image à partir de la matrice ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD7.5] Compter les pixels d'une Image
    Par mlww dans le forum WinDev
    Réponses: 5
    Dernier message: 05/07/2007, 22h50
  2. Lire les pixels de grandes images sans les ouvrir
    Par psicot dans le forum Multimédia
    Réponses: 1
    Dernier message: 16/04/2007, 18h59
  3. Changer les pixels dans une image
    Par mimane_01 dans le forum Images
    Réponses: 1
    Dernier message: 15/02/2007, 13h12
  4. Réponses: 9
    Dernier message: 07/02/2007, 15h57
  5. Utlisation d'image pour les <li> qui ne marche pas
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 05/11/2005, 17h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo