IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Ligne dans une BufferedImage avec couleur inverse


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Par défaut Ligne dans une BufferedImage avec couleur inverse
    Bonjour, j'ai un BufferedImage et je veux dessiner un rectangle dans ce BufferedImage en utilisant la couleur inverse de chaque pixel sous la ligne.
    Et en plus mon rectangle doit pouvoir être dessiné avec une rotation ...

    des idées ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    961
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 961
    Par défaut
    Je ne suis pas sûr d'avoir compris votre question, vous cherchez à passer des pixels en vidéo inverse à l'intérieur d'une zone rectangulaire?
    Si je ne me trompe pas, on peut faire passer un pixel en vidéo inverse en inversant chaque valeur de sa couleur rgb. (En prenant 255 - valeur.) Les fonctions getRGB(x, y) et setRGB(x, y) renvoient les codes RGB (avec les trois valeurs) de chaque pixel. Il suffit de faire des boucles et d'inverser chaque pixel.

  3. #3
    Membre habitué
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Par défaut
    Bonjour et merci de la réponse.

    J'ai déja le systeme de boucle en gérant pixel par pixel, mais comme il faut que je puisse dessiner avec un angle je pensais passer par un Graphics2D en utilisant une AffineTransform et en dessinant un rectangle directement dans mon Graphics2D avec g2d.drawRect().

    En fait je ne sais pas comment faire et je tourne en rond a défaut de faire tourner mon rectangle !!

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    961
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 961
    Par défaut
    Qu'est-ce qui vous empêche d'utiliser le système de boucles avec un angle?

  5. #5
    Membre habitué
    Inscrit en
    Avril 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 9
    Par défaut
    Citation Envoyé par BugFactory
    Qu'est-ce qui vous empêche d'utiliser le système de boucles avec un angle?
    mon niveau lamentable en trigo !

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Cela n'est'il pas tout simplement possible en se mettant en mode XOR ?
    Voir http://java.sun.com/j2se/1.5.0/docs/.../Graphics.html
    Penser a faire un setPaintMode() pour revenir en mode normal une fois termine.

    Pour la rotation, desole, mais c'est relativement facile sans etre super-mega fort en trigo. Soit un rectangle de coordonnees x et y et de taille width et height.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    int centerX = x - width /2;
    int centerY = y - height /2;
    // Faire des essais pour trouver la couleur appropriee.
    graphics.setXORMode(...);
    graphics.setColor(...);
    // On se met sur le centre de rotation.
    graphics.translate(centerX, centerY);
    // On calcule le decalage d'angle.
    double angle = (2 * Math.PI) / n;
    // On dessine chaque rectangle.
    for (int i = 0 ; i < n ; i++) {
      graphics.fillRect(- width / 2, - height / 2, width, height);
      graphics.rorate(angle);
    }
    // On revient a l'angle initial.
    graphics.rotate(- n * angle);
    // On revient a l'orgine initial.
    graphics.translage(- centerX, - centerY);
    graphics.setPaintMode();
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Membre expérimenté Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Par défaut
    pour faire un truc de ce genre, je pense que créerais une nouvelle bufferedimage de la taille du rectangle désiré, que j'utiliserais son Graphics pour écrire les nouvelles valeurs des pixels que j'aurais obtenu en effectuant la rotation inverse de celle du rectangle ,puis en faisant un getSubImage().
    C'est peut être un peu confus, là, non ?
    Bon... En gros, je peindrais la bufferedimage tournée dans le sens inverse de la rotation du rectangle sur unhe nouvelle buffered image. Puis je clipperais tout ça avec un getsubimage, et ensuite j'utiliserais les pixels pour les modifier un à un. Voilà, voilà, c'est l'idée à la volée...

  8. #8
    Membre éprouvé
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Par défaut
    Je pense que ton principal probleme est de trouver les pixels a modifier dans ta zone rectangulaire (apres rotation).
    Pour ma part, je pense que ce qui suit est assez facile:
    • cree une nouvelle BufferedImage de la meme taille que la premiere
    • la peindre en blanc (par exemple)
    • dessiner ton rectangle en noir(toujours par exemple)
    • faire tourner ton rectagle det l'angle desire grave a des AffinTransform
    • parcourir l'image ainsi generee, des que tu tombes sur un pixel noir, alors sur ton image original tu changes la valeur du pixel de meme coordonnees
    Je sais pas si j'ai ete assez clair.....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Verrouiller une ligne dans une table avec sql server
    Par benabdessamed dans le forum Développement
    Réponses: 30
    Dernier message: 03/10/2012, 12h49
  2. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  3. [AJAX] Ajout de lignes dans une table avec Ajax
    Par Tententai dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 01/11/2007, 15h54
  4. Réponses: 4
    Dernier message: 02/06/2007, 12h35
  5. Réponses: 2
    Dernier message: 24/11/2006, 08h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo