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

2D Java Discussion :

[Graphics2D] generer des surfaces


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Par défaut [Graphics2D] generer des surfaces
    Bonjour,

    le titre n'est pas tres explicite mais je ne vois pas comment expliquer autrement

    j'ai realisé grace au graphic2D une image d'un texte en forme de rond. suite a cela je dois effectuer des rotations sur les lettres afin qu elles suivent la forme du rond.

    mon graphics2D est creer a partir BufferedImage, le probleme est losque j'essai d afficher les lettres avec de petite rotation c est toute l image qui effectue cette rotation et les lettres apparaissent n'impote comment.

    est il possible de creer des surfaces pour chaque lettre et ensuite de les appliquer a l image? afin de pouvoir leur donne la bonne rotation et un affichage correct a la fin.

    je ne sais pas si vous m avez compris ?

    merci

  2. #2
    Membre éclairé Avatar de bubu56
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 58
    Par défaut
    quand tu effectues une rotation de ton Graphics2D toutes les choses que tu vas dessiner ensuite seront affectées par la rotation.
    Si tu veux afficher juste un element avec une rotation voici la méthode :

    rotation (angle)
    dessin à tourner...
    rotation (-angle)
    dessin du reste...

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Par défaut
    bonjour,

    Non malheureusement cela ne peut fonctionner, ce qu il me faut c'est creer des surfaces, pour chaque lettre une surface avec laquelle je puisse faire ce que je veux, j y arrive en php, en c/c++ mais en java je ne sais pas si c est possible.

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 75
    Par défaut
    salut,




    est ce que tu pourrais me dire comment on fait pour creer des graphics2d en java......jai lu des tuto sur le sitede sun mais les exemples quils sites ne concernent que des JApplets alors que moi je ne cherche des exemples avec des applications java.....

    taurais des exemples dappli a me proposer ou des liens de tuto avec des exemples de claases sur les graphics2d???stp

    merci

  5. #5
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    ankou82 : tu peux utiliser plusieurs BufferedImage, voire même une pour chaque lettre. C'est difficile de te conseiller sans voir précisément ce que tu veux faire, mais une chose est sûre, c'est que c'est possible en Java.

    max25b : n'importe quel composant de l'api standard fournit un objet de type Graphics2D en paramètre de la méthode paint. Tu peux sans problème remplacer JApplet par JPanel ou JLabel ou même JTable. Tu peux aussi utiliser une BufferedImage et sa méthode createGraphics. Merci de ne pas trop polluer un fil qui n'est pas à toi.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 75
    Par défaut call graph
    salut,

    je cherche a faire un call graphe........

    pour chaque nom de methode je veux placer un rectangle avec du texte dedans (plusieurs lignes de textes).........et a la fin je relierais les rectangles avec des fleches selon que telle ou telle methode appelle une autre methode..........voila tout

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Par défaut
    j arrive a afficher le texte en forme de rond mais je n arive pas a ce que chaque lettre soit incurvé en suivant la forme du rond

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    protected void doGet(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException {
            
      
              res.setContentType("image/jpeg");           
              ServletOutputStream out = res.getOutputStream();
              
              JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(out);          
              BufferedImage image = new BufferedImage(500, 500, BufferedImage.TYPE_BYTE_INDEXED);
              
              Graphics2D g  = image.createGraphics();
              Font font = new Font("Arial", Font.PLAIN, 20);
              g.setFont(font);
              g.setColor(Color.white);
              g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
             
              FontMetrics fontMetrics = g.getFontMetrics();
              int taille = s.length();  
              String machaine [] = new String [taille];
              machaine = decoupe(s);
              
              
              BufferedImage tabimage [] = new BufferedImage [taille];int longueur;int hauteur;
              float angulo = 180 / taille;double angle;
              for (int t=0 ; t<taille ; t++){
                  angle = (-(angulo * t + angulo / 2)+90);
                  longueur = fontMetrics.stringWidth(machaine[t]);
                  hauteur = fontMetrics.getHeight();
                  tabimage[t] = new BufferedImage(longueur, hauteur, BufferedImage.TYPE_BYTE_INDEXED);
                  Graphics2D graph  = tabimage[t].createGraphics();
                  graph.setFont(font);
                  graph.setColor(Color.white);
                  
                  graph.drawString(machaine[t],0,hauteur);
                  graph.rotate(angle); 
              }
              
              int aux = 1;
                              
              
              double x;double y;
              if (taille > 0)
                {
                  int a = 250; int b = 250; int r =200;            
                  for (int i=0; i < taille; i++) {
                                       g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
                      // x = a + r * cos(theta)
                      // y = b + r * sin(theta)
                      x = a + r * Math.cos(deg2rad((angulo * i) + (angulo/2) - 177));
                      y = b + r * Math.sin(deg2rad((angulo * i) + (angulo/2) - 177));
                     g.drawImage(tabimage[i],null,(int)x,(int)y);
    
                  }
                }
    
             enc.encode(image);     
        }
    je pense que je ne suis pas parti comme il faut, mais je ne connais pas grand chose a java

  8. #8
    Membre confirmé Avatar de zoullou
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Par défaut
    Tu peut regader le code de cette annimation, il y a plein de transformation, ça pourrais vous aider :
    Attendre avec style et l'API Swing

    A+

  9. #9
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Ok, alors pour incurver le texte suivant un rond, il faut utiliser une AffineTransform. Mais c'est une application linéaire assez tendue, et mes cours de math sont trop loin pour que je puisse te calculer la matrice qui fait ça.

    En tout cas, c'est possible. Peut être que sur le forum algorithmes tu trouveras des gens pour te conseiller.

    Ce qu'il te faut trouver, c'est la matrice d'une application linéaire qui incurve un texte. C'est une application qui transforme un rectangle en un tronc d'arc de disque. Elle est définie par une matrice 2*2, et il doit y avoir des cosinus un peu partout.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    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 901
    Billets dans le blog
    54
    Par défaut
    A priori ce c'est guere necessaire de devoir calculer la matrice manuellement car AffineTransform fait ca d'elle avec ses methodes de factory (mes cours de maths sont loin aussi et je crois me souvenir que je dormais pas mal en 1ere annee de DEUG pendant les cours de calcul matriciel ).

    Tu peux recuperer separement les formes des characteres d'une chaine en fonction de sa police (glyphe) via le GlyphVector, ce qui permet de transformer et de dessiner separement les characters les uns des autres de maniere a mieux epouser la forme de la courbe. Pour calculer les angles de decalage entre chaque character ou sous-chaine, un peu de trigos et de divisions, le tout en fonction de la longueur totale de la chaine et de la largueur du chaque glyphe, ca reste quand meme bien plus simple que du calcul matriciel
    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

Discussions similaires

  1. Generer des noms de variables avec une boucle
    Par moutanakid dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/07/2004, 17h45
  2. Comment générer des fichiers html ?
    Par keke33 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 04/06/2004, 16h28
  3. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  4. DirectDraw: Créer des surfaces 256 couleurs
    Par Magus (Dave) dans le forum DirectX
    Réponses: 5
    Dernier message: 14/10/2002, 22h28
  5. Taille des surfaces avec DirectDraw
    Par Shakram dans le forum DirectX
    Réponses: 5
    Dernier message: 09/09/2002, 00h42

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