j'utilise pour une application des JLabel avec une icone : quand je passe
dessus avec la souris, l'image change de couleur et le curseur se
transforme en main pour indiquer à l'utilisateur qu'une action est
possible.
Mon problème est que je ne suis pas un as en manipulation des données RGB.
J'utilise un filtre pour changer l'image du label, mais je ne sais rien
faire d'autre qu'inverser les couleurs :
class FiltreNegatif extends RGBImageFilter {
public FiltreNegatif () {
canFilterIndexColorModel = true;
}
public int filterRGB (int x, int y, int rgb) {
int alpha = rgb & 0xFF000000;
// Transformation des composants RGB en leur inverse
int rougeInverse = (rgb & 0xFF0000) ^ 0xFF0000;
int vertInverse = (rgb & 0x00FF00) ^ 0x00FF00;
int bleuInverse = (rgb & 0x0000FF) ^ 0x0000FF;
return alpha | rougeInverse | vertInverse | bleuInverse ;
}
}
Comment faire un effet de type icone qui s'illumine au passage de la souris
?
Quelqu'un sait-il aussi comment faire un effet à la KDE : un périmètre en
pointillé apparait un court instant après le clic ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
oliv
Arnaud wrote:
Comment faire un effet de type icone qui s'illumine au passage de la souris?
Tu pourrais essayer une transformation comme :
public int filterRGB (int x, int y, int rgb) { int alpha = rgb & 0xFF000000; int rouge = (rgb & 0x00FF0000) >> 16; int vert = (rgb & 0x0000FF00) >> 8; int bleu = (rgb & 0x000000FF);
Et aussi, en utilisant une Color intermédiaire, tu pourrais avoir accès à une routine comme lighter() ou faire des manips dans l'espace Teinte-Saturation-Lumière en faisant une conversion RGBtoHSB() puis modif puis retour RGBtoHSB().
-- oliv
Arnaud wrote:
Comment faire un effet de type icone qui s'illumine au passage de la souris?
Tu pourrais essayer une transformation comme :
public int filterRGB (int x, int y, int rgb) {
int alpha = rgb & 0xFF000000;
int rouge = (rgb & 0x00FF0000) >> 16;
int vert = (rgb & 0x0000FF00) >> 8;
int bleu = (rgb & 0x000000FF);
Et aussi, en utilisant une Color intermédiaire, tu pourrais avoir
accès à une routine comme lighter() ou faire des manips dans l'espace
Teinte-Saturation-Lumière en faisant une conversion RGBtoHSB() puis
modif puis retour RGBtoHSB().
Comment faire un effet de type icone qui s'illumine au passage de la souris?
Tu pourrais essayer une transformation comme :
public int filterRGB (int x, int y, int rgb) { int alpha = rgb & 0xFF000000; int rouge = (rgb & 0x00FF0000) >> 16; int vert = (rgb & 0x0000FF00) >> 8; int bleu = (rgb & 0x000000FF);
Et aussi, en utilisant une Color intermédiaire, tu pourrais avoir accès à une routine comme lighter() ou faire des manips dans l'espace Teinte-Saturation-Lumière en faisant une conversion RGBtoHSB() puis modif puis retour RGBtoHSB().
-- oliv
Arnaud
merci, j'ai pu obtenir quelques résultats intéressants mais mes images ont un fond transparent : lorsque je modifie la clarté, le fond ne reste pas transparent (il devient blanc ou noir ou d'une autre couleur), ce qui est visuellement pas beau du tout !
Comment utiliser la fonction brighter(), ou une modification de la brightness via le système HSB, sans toucher au caractère transparent de mon fond d'image ?
-- Arnaud
merci, j'ai pu obtenir quelques résultats intéressants mais mes images ont
un fond transparent : lorsque je modifie la clarté, le fond ne reste pas
transparent (il devient blanc ou noir ou d'une autre couleur), ce qui est
visuellement pas beau du tout !
Comment utiliser la fonction brighter(), ou une modification de la
brightness via le système HSB, sans toucher au caractère transparent de mon
fond d'image ?
merci, j'ai pu obtenir quelques résultats intéressants mais mes images ont un fond transparent : lorsque je modifie la clarté, le fond ne reste pas transparent (il devient blanc ou noir ou d'une autre couleur), ce qui est visuellement pas beau du tout !
Comment utiliser la fonction brighter(), ou une modification de la brightness via le système HSB, sans toucher au caractère transparent de mon fond d'image ?
-- Arnaud
oliv
Arnaud wrote:
merci, j'ai pu obtenir quelques résultats intéressants mais mes images ont un fond transparent : lorsque je modifie la clarté, le fond ne reste pas transparent (il devient blanc ou noir ou d'une autre couleur), ce qui est visuellement pas beau du tout !
Au passage, je corrige une grosse erreur : ça n'était pas Math.max() mais bien-sûr min()...
Ce qui donne corrigé : public int filterRGB (int x, int y, int rgb) { int alpha = rgb & 0xFF000000; int rouge = (rgb & 0x00FF0000) >> 16; int vert = (rgb & 0x0000FF00) >> 8; int bleu = (rgb & 0x000000FF) >> 0;
Ou alors on peut simplement borner les valeurs par rouge = (int)(rouge * 1.3) & 0xFF;
Pour le phénomène alpha, j'ai codé un petit essai et je n'observe pas ça : ce qui est transparent le reste bien.
Cela était-il dû à l'erreur précédente ?
Sinon, cela pourrait-il être dû à une implémentation système dépendante ? (Je suis sous Mac OS X.3)
Comment utiliser la fonction brighter(), ou une modification de la brightness via le système HSB, sans toucher au caractère transparent de mon fond d'image ? Désolé, là encore je n'observe pas ça.
Si tu veux m'envoyer un bout de code et une icone d'exemple, je pourrais vérifier.
Ma vraie adresse est @online.fr
-- oliv
Arnaud wrote:
merci, j'ai pu obtenir quelques résultats intéressants mais mes images ont
un fond transparent : lorsque je modifie la clarté, le fond ne reste pas
transparent (il devient blanc ou noir ou d'une autre couleur), ce qui est
visuellement pas beau du tout !
Au passage, je corrige une grosse erreur : ça n'était pas Math.max()
mais bien-sûr min()...
Ce qui donne corrigé :
public int filterRGB (int x, int y, int rgb) {
int alpha = rgb & 0xFF000000;
int rouge = (rgb & 0x00FF0000) >> 16;
int vert = (rgb & 0x0000FF00) >> 8;
int bleu = (rgb & 0x000000FF) >> 0;
Ou alors on peut simplement borner les valeurs par
rouge = (int)(rouge * 1.3) & 0xFF;
Pour le phénomène alpha, j'ai codé un petit essai et je n'observe pas
ça : ce qui est transparent le reste bien.
Cela était-il dû à l'erreur précédente ?
Sinon, cela pourrait-il être dû à une implémentation système
dépendante ? (Je suis sous Mac OS X.3)
Comment utiliser la fonction brighter(), ou une modification de la
brightness via le système HSB, sans toucher au caractère transparent de mon
fond d'image ?
Désolé, là encore je n'observe pas ça.
Si tu veux m'envoyer un bout de code et une icone d'exemple, je
pourrais vérifier.
merci, j'ai pu obtenir quelques résultats intéressants mais mes images ont un fond transparent : lorsque je modifie la clarté, le fond ne reste pas transparent (il devient blanc ou noir ou d'une autre couleur), ce qui est visuellement pas beau du tout !
Au passage, je corrige une grosse erreur : ça n'était pas Math.max() mais bien-sûr min()...
Ce qui donne corrigé : public int filterRGB (int x, int y, int rgb) { int alpha = rgb & 0xFF000000; int rouge = (rgb & 0x00FF0000) >> 16; int vert = (rgb & 0x0000FF00) >> 8; int bleu = (rgb & 0x000000FF) >> 0;
Ou alors on peut simplement borner les valeurs par rouge = (int)(rouge * 1.3) & 0xFF;
Pour le phénomène alpha, j'ai codé un petit essai et je n'observe pas ça : ce qui est transparent le reste bien.
Cela était-il dû à l'erreur précédente ?
Sinon, cela pourrait-il être dû à une implémentation système dépendante ? (Je suis sous Mac OS X.3)
Comment utiliser la fonction brighter(), ou une modification de la brightness via le système HSB, sans toucher au caractère transparent de mon fond d'image ? Désolé, là encore je n'observe pas ça.
Si tu veux m'envoyer un bout de code et une icone d'exemple, je pourrais vérifier.