Soyez le premier à donner votre avis sur cette source.
Snippet vu 16 819 fois - Téléchargée 27 fois
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
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
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.