Négatif d'une image (graphics)

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

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.