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

2D Java Discussion :

Convertir image en sépia


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Par défaut Convertir image en sépia
    Bonjour, je souhaite écrire une fonction me permettant de convertir le BufferedImage passé en paramètre en image dans les tons sépia.
    Or, lorsque j'exécute mon programme, le compilateur me donne une erreur de type ArrayIndexOutOfBoundsException.
    Je n'ai cependant pas réussi à la corriger. Si quelqu'un peut m'éclairer.
    Voici mon code:

    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
    public void sepia(BufferedImage ic, int intensite)
    	{
    		w = ic.getWidth();
    	    h = ic.getHeight();
    	    int sepiaDepth = 20;
    		
    			
    			WritableRaster raster = ic.getRaster();
    			pixels = new int[w*h*3];
    			raster.getPixels(0, 0, w, h, pixels);
    			
    			for (int i=0;i<pixels.length; i+=3)
    			{
    				int r = pixels[i];
    				int g = pixels[i+1];
    				int b = pixels[i+2];
    							
    			    int gry = (r + g + b) / 3;
    			    r = g = b = gry;
    			    r = r + (sepiaDepth * 2);
    			    g = g + sepiaDepth;
    		
    	            if (r>255) r=255;
    	            if (g>255) g=255;
    	            if (b>255) b=255;
    	            
    	            // Darken blue color to increase sepia effect
    			    b-= intensite;
    			    
    			    if (b<0) b=0;
    			    if (b>255) b=255;
    	            
    	            pixels[i] = r;
    	            pixels[i+1]= g;
    	            pixels[i+2] = b;
    			}		
    			raster.setPixels(0, 0, w, h, pixels);
    		}
    L'exception est indiquée à la ligne que j'ai mise en rouge. Je présume donc qu'elle vient du tableau de pixels...
    En tous cas si vous avez des idées ou d'autres solutions alternatives pour faire passer une image en tons sépia je suis preneuse, car j'ai eu vraiment du mal à trouver des pistes sur internet.

    merci d'avance !

  2. #2
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    ton boucle for me parait étrange

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (int i=0;i<pixels.length; i+=3)

  3. #3
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 819
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 819
    Par défaut
    Salut,

    Citation Envoyé par Relyss Voir le message
    Or, lorsque j'exécute mon programme, le compilateur me donne une erreur de type ArrayIndexOutOfBoundsException.
    RGB ta BufferedImage ou ARGB?



    Citation Envoyé par slim_java Voir le message
    ton boucle for me parait étrange

    C'est une boucle avec un incrément de 3
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  4. #4
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Citation Envoyé par plegat Voir le message


    C'est une boucle avec un incrément de 3
    salut plegat. j'ai pensais dire pourquoi ne pas utiliser la boucle while malgré que ca résoud pas le probléme

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 908
    Billets dans le blog
    54
    Par défaut
    Tu devrais aller voir du cote des classes LookupOp (manipulation de la palette de couleur de l'image) et RescaleOp (variation de la couleur d'un pixel donne) des classes concretes derivees de BufferedImageOp qui perment d'appliquer des traitements automatiques sur des instances de BufferedImage (il y en a d'autres qui permettent de faire du blur, sharpen, etc.).

    Egalement le livre Filthy Rich Client donne un code pour une creer une classe ColorTintFilter permettant de tinter une image dans une couleur donnee. Va voir sur http://filthyrichclients.org/ section Examples et telecharge les exemples du chapitre 8 : Image Processing (le code de ColorTintFilter est dans le sous-dossier CustomImageOp contenu dans l'archive).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Par défaut
    Je me permets d'éditer pour vous annoncer que j'ai résolu mon problème de moi même finalement, en retravaillant un code différent, beaucoup plus simple que celui que je vous ai posté, que j'ai pu trouver par après.
    Il suffisait en réalité de transformer le BufferedImage en niveaux de gris, puis de redessiner l'image dans un nouveau Buffer en lui mettant les couleurs du sepia.

    Merci à tous de votre aide, que j'ai parcourue avec attention.

    Bonne soirée à tous

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

Discussions similaires

  1. Commande Convertir Image en V11
    Par Alex06 dans le forum 4D
    Réponses: 1
    Dernier message: 24/10/2008, 17h04
  2. VBA:convertir images en BMP
    Par popol5485 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/09/2008, 18h39
  3. [Newsgroup]Convertir image .txt en jpeg
    Par goldkey dans le forum Dépannage et Assistance
    Réponses: 2
    Dernier message: 05/06/2007, 08h46
  4. convertir image RGB en HSV
    Par deb_Sous_Python dans le forum Calcul scientifique
    Réponses: 5
    Dernier message: 23/04/2007, 12h25

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