Utiliser un filtre RGB sur un composant du Look and Feel

cs_peripero Messages postés 8 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 6 avril 2006 - 5 avril 2006 à 09:08
cs_Dobel Messages postés 333 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 23 novembre 2009 - 8 avril 2006 à 22:00
Bonjour,
J'aimerais simplement savoir s'il etait possible d'utiliser un filtre sur un composant (style combobox) utilisé dans l'UIManager. Si oui, comment??

5 réponses

bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 2
5 avril 2006 à 11:00
coucou,

si tu as un setColor() qui traine quelque part, tu peux toujours lui balancer une couleur dont tu as définie les rgb que tu veux :
Color pouet = new Color( 255 , 255 , 255 , 0 ) ;//(int r , int g , int b , int alpha)
0
cs_peripero Messages postés 8 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 6 avril 2006
5 avril 2006 à 14:15
En fait, j'ai peint les coins de mon composant dans une couleur créée dans la perspective d'apliquer un filtre dessus. J'ai ensuite fait référence à ce composant dans mon UIManager mais je ne sais pas du tout quelles méthodes utilisées ensuite. J'ai pensé à modifier le paint mais sans résultat
0
cs_Dobel Messages postés 333 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 23 novembre 2009 1
5 avril 2006 à 20:09
Tu veux réaliser un véritable filtrage sur le composant ?

J'ai déjà écrit un truc qui permettait de dessiner sur mon composant avec un ColorSpace perso. En définissant bien le colorspace, ça doit être possible de faire tout type de filtrage RGB.

Si ça correspond à ce que tu cherches, je peux faire un effort pour retrouver ce bout de code

Je ne sais pas si c'est la méthode la plus efficace par contre

Dobel
[size=1][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]/size=1
0
cs_peripero Messages postés 8 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 6 avril 2006
6 avril 2006 à 08:24
Oui, ca semble bien correspondre. Si tu pouvais retrouver ca dans tes archives j'adhère au fan club direct
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
0
Rejoignez-nous