cs_Dobel
Messages postés
333
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
23 novembre 2009
1
8 avril 2006 à 22:00
Salut, désolé d'avoir mis un peu de temps pour répondre.
J'ai refait un exemple adapté de mon code.
Ici, le filtrage consiste à récupérer uniquement la composante rouge du composant, et à la placée sur la composante verte :)
J'ai donc utilisé un ColorSpace à une seule composante
A+
<hr size="2" width="100%">
import java.awt.*;
import javax.swing.*;
import java.awt.image.*;
import java.awt.color.ColorSpace;
public class Cadre1
extends JFrame {
JPanel contentPane;
FlowLayout flowLayout1 = new FlowLayout();
//Création d'un JButton filtré : le filtrage se fait dans la méthode paint qu'on redéfini
JButton jButton1 = new JButton() {
//Pour effectuer le filtrage, ce n'est pas fin :
//J'effectue le dessin sur une BufferedImage ayant le nouveau ColorSpace
//Puis je dessine la BufferedImage...
//cf doc :)
public void paint(Graphics g) {
MonColorSpace cp = new MonColorSpace();
ComponentColorModel cm = new ComponentColorModel(cp,false, false, java.awt.Transparency.OPAQUE, DataBuffer.TYPE_USHORT);
BufferedImage buffered = new BufferedImage(cm, cm.createCompatibleWritableRaster(this.getWidth(), this.getHeight()), false, null);
super.paint(buffered.getGraphics());
g.drawImage(buffered, 0, 0, null);
}
};
JButton jButton2 = new JButton();
public Cadre1() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
}
catch (Exception exception) {
exception.printStackTrace();
}
}
/**
* Initialisation du composant.
*
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
contentPane = (JPanel) getContentPane();
contentPane.setLayout(flowLayout1);
setSize(new Dimension(400, 300));
setTitle("Titre du cadre");
jButton1.setForeground(Color.orange);
jButton1.setText("Bouton filtré");
jButton2.setForeground(Color.orange);
jButton2.setText("Le même non filtré");
contentPane.add(jButton1);
contentPane.add(jButton2);
}
public static void main(String[] args) {
Cadre1 fenetre = new Cadre1();
fenetre.setVisible(true);
}
}
/**
* C'est un exemple de ColorSpace à une seule composante.
* Cette composante est ici définie à partir des valeurs RGB
* Ici, il s'agit juste la composante rouge qui est récupérée et placée sur la composante verte :)
*/
class MonColorSpace extends ColorSpace {
private ColorSpace gray;
public MonColorSpace() {
super(ColorSpace.CS_GRAY, 1);//le 1 signifie que notre espace de couleur n'a qu'une seule composante (pas besoin de plus!)
gray = ColorSpace.getInstance(ColorSpace.CS_GRAY);
}
public float[] fromCIEXYZ(float[] colorvalue) {
return gray.fromCIEXYZ(colorvalue);
}
//l'unique couleur, crée à partir des valeurs RGB
public float[] fromRGB(float[] rgbvalue) {
return new float[] {rgbvalue[0]};
//Le tableau à une longueur de 1 comme on a qu'une composante
//étape lente !!!
}
public float[] toCIEXYZ(float[] colorvalue) {
return gray.toCIEXYZ(colorvalue);
}
public float[] toRGB(float[] colorvalue) {
return new float[] {0, colorvalue[0], 0}; //ici, on retourne la valeur RGB qui nous intéresse : tout sur lacomposante verte, rien sur les autres :)
}
}
Dobel
[Une fois rien, c'est rien; deux fois rien, ce n'est pas beaucoup, mais pour trois fois rien, on peut déjà s'acheter quelque chose, et pour pas cher