Négatif d'une image (graphics)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 819 fois - Téléchargée 27 fois

Contenu du snippet

un petit code que je possèdais dasn un de mes nombreux livres de java qui risque de peut-être être utilile pour certain

ça permet de mettre une image en Négatif, donc inversé ses couleurs

ça serait extrêemnt facile de le modifier pour faire une image noir et blanc. Mais va faire ça dans une autre source

Source / Exemple :


import java.applet.*;
import java.awt.*;
import java.awt.image.*;

// classe d'exemple
public class ExMM7 extends Applet {
   
   Image          imgOriginal;   // image originale
   Image          imgNegativ;    // image négative
   MediaTracker   medTreck;      // surveillance des médias
   int            iHauteur  = 0;   // dimensions de l'image
   int            iLargeur = 0;        

   public void init(){
      // chargement de l'image d'origine
      loadOriginal();

      // établissement des dimensions de l'image
      iLargeur   = imgOriginal.getWidth(this);
      iHauteur    = imgOriginal.getHeight(this);
            
      // ajustement de la fenêtre d'applet
      resize( iLargeur * 2, iHauteur );      
   
      // création du négatif
      imgNegativ = createImage( new FilteredImageSource( imgOriginal.getSource()
                            , new ImageNegative() ) );
   }// init

   public void loadOriginal(){
      // initialisation de MediaTracker
      medTreck = new MediaTracker(this);

      // chargement du fichier image à éditer
      imgOriginal = getImage( getCodeBase(), getParameter("Image") );
      medTreck.addImage( imgOriginal, 1 );
      try{
         medTreck.waitForID( 1 );
      }catch (InterruptedException e){
         System.out.println ("Erreur : "+e);
      }
   }// loadOriginal

   public void paint(Graphics g){
      update(g);
   }// paint

   public void update(Graphics g){
      g.drawImage( imgOriginal, 0, 0, this );
      g.drawImage( imgNegativ, iLargeur+1, 0, this );
   }// update
}// // ExMM7

// classe auxiliaire pour le filtre
class ImageNegative extends RGBImageFilter{

   public ImageNegative(){
      canFilterIndexColorModel = true;
   }// ImageNegative

   public int filterRGB( int iX, int iY, int iRgb ){
      // séparation des couleurs
      int iR = (iRgb >> 16) & 0xFF;   // rouge
      int iG = (iRgb >> 8) & 0xFF;    // vert
      int iB = iRgb & 0xFF;           // bleu

      // enregistrement des valeurs HSB
      float fHsb[] = new float[3];

      // conversion des couleurs RVB dans le modèle HSB
      Color.RGBtoHSB( iR, iG, iB, fHsb );
      
      // inversion de la clarté
      fHsb[2] = 1 - fHsb[2];

      // reconversion en couleurs RVB (valeur alpha maximale)
      return ( 0xFF000000 | Color.HSBtoRGB( fHsb[0], fHsb[1], fHsb[2] ) );      
   }// filterRGB

}// ImageNegative

A voir également

Ajouter un commentaire Commentaires
Messages postés
2
Date d'inscription
jeudi 15 mai 2003
Statut
Membre
Dernière intervention
6 octobre 2003

Salut a tous,
J'ai teste ce source car il fait parti des exos d'un bouquin et je ne trouve pas que le source sois très bien surtout en ce qui concerne le filtre négatif qui n'est pas à la hauteur. J'en ai récupéré un plus rapide et plus performant sur le site
http://www.eteks.com/coursjava/image10.html

Voici le filtre :
class FiltreNegatif extends RGBImageFilter
{
public FiltreNegatif ()
{
// La transformation des couleurs ne dépend pas
// des coordonnées des points de l'image
canFilterIndexColorModel = true;
}

public int filterRGB (int x, int y, int rgb)
{
int alpha = rgb & 0xFF000000;
// Transformation des composantes RGB en leur inverse
int rougeInverse = (rgb & 0xFF0000) ^ 0xFF0000;
int vertInverse = (rgb & 0x00FF00) ^ 0x00FF00;
int bleuInverse = (rgb & 0x0000FF) ^ 0x0000FF;
return alpha | rougeInverse | vertInverse | bleuInverse;
}
}

Il est plus simple en plus.
Vous avez juste a reprendre le source du haut et a remplacer la ligne :
imgNegativ = createImage( new FilteredImageSource( imgOriginal.getSource()
, new ImageNegative() ) );

par :
imgNegativ = createImage( new FilteredImageSource( imgOriginal.getSource()
, new FiltreNegatif() ) );

et ca marche !!! enfin ca a marché pour moi
Messages postés
1
Date d'inscription
mercredi 17 septembre 2003
Statut
Membre
Dernière intervention
18 septembre 2003

Ouais ok mais bon .... ca aurais etait bien que tu mette les commentaire ou les remarques qui etaient aussi ds le book
Messages postés
1258
Date d'inscription
mercredi 21 mars 2001
Statut
Modérateur
Dernière intervention
21 juin 2009
2
etant donné que je suis meganoob en java, G rien pigé au code, mais je V y travailler, ça me parait instructif :)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.