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

SWT/JFace Java Discussion :

Dessiner une image sous certaine contrainte


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut Dessiner une image sous certaine contrainte
    Bonjour, j'ai un problème de version de swt.
    Je dois faire tourner ce code, sous une version de swt qui ne l'accepte pas.
    Le but est simple, dans un Canvas, j'ai une org.eclipse.swt.Image source, que je veux "copier" dans une image screen.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     private void paint(GC gc)
    {
          ...
          org.eclipse.swt.graphics.Image screen= new Image(getDisplay(), clientRect.width, clientRect.height);
     
          GC newGC = new GC(screen);
          newGC.setClipping(clientRect);
          newGC.drawImage(sourceImage, imageRect.x, imageRect.y, imageRect.width, imageRect.height, destRect.x,
              destRect.y, destRect.width, destRect.height);
          newGC.dispose();
     
          gc.drawImage(screen, 0, 0);
    }
    Le problème est que dans la version de swt ou ce code doit tourner, "new GC(screen)" ne marche pas car, org.eclipse.swt.graphics.Image n'implémente pas Drawable... La méthode GC.setClipping n'existe pas non plus.
    Quelqu'un aurait une idée?

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Je ne connais pas toutes les versions de SWT depuis la préhistoire, mais j'ai la version 1.0 de novembre 2001 de Eclipse, avec la version 1.0 du plugin org.eclipse.swt, dont la classe Image implémente déjà Drawable (Et GC a bien la méthode setClipping(Rectangle)).

    Du coup, je ne vois pas trop quelle version de SWT tu pourrais utiliser... C'est dans quel contexte ?

    Si c'est du cropping d'image que tu cherches à faire, à la limite, tu devrais pouvoir te passer du clipping : normalement, rien ne sera jamais, de toute manière, dessiné en dehors des dimensions de l'image (je veux dire qu'on peut dessiner en dehors, sans erreurs, et ça n'a pas pour effet d'agrandir l'image). D'autre part, tu utilises bien la classe org.eclipse.swt.graphics.Rectangle ? Pas Rectangle de AWT ou de Draw2D, par hasard ?

    Sinon, inutile de créer une nouvelle image : autant dessiner directement dans le contexte graphique passé en argument de ta méthode paint(), que je suppose être appelée dans un PaintListener, (par contre, là, le clipping est indispensable pour cropper), mais peut être que la classe GC de ta "version étrange" de SWT a au moins la méthode setClipping(int, int, int, int) ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut
    En fait je travaille sur une plateforme RAP qui utilise les class SWT contenu dans le package org.eclipse.rap.rwt. Impossible de les changer.
    Je ne peux pas utiliser une autre version de swt a coté, l'application RAP ne le supporte pas...
    Il n'y a aucune méthode de clipping...

    C'est assez ennuyeux pour moi qui ne maîtrise pas cette aspect de swt et qui doit intégrer un module d'image. Je suis incapable de trouver une autre méthode de "dessin"...

    Ce sont bien des org.eclipse.swt.graphics.Rectangle.

    En gros c'est un module qui permet d'afficher dans un canvas une image et permettre a un utilisateur de zoomer, jouer avec luminosité etc...
    Il y a une sourceImage, qu'on copie dans une screenImage voué a être affiché. ça permet si j'ai bien compris d'appliquer entre autre le "zoom" choisi.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Je pense que ton problème est lié au bugs suivants :



    Le bug est assigné, mais quant à savoir quand ce sera corrigé, il faut (pouvoir) être patient (ce qui n'est pas évident, certes, et je compatis : je suis moi-même dans le même cas sur un autre bug).

    Cepandant, on doit pouvoir trouver un workaround, en chargeant l'image en SWT, en croppant en SWT (voir en AWT), et en convertissant ensuite SWT vers RWT.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Tiens, je viens de regarder un peu l'API RWT, et il semble que certaines limitations soient, en tout cas pour le moment, assumées : Differences between the RAP Widget Toolkit and SWT (Voir "Notable limitations/Drawing Limitations").

    Les packages de RWT et SWT étant les mêmes, il va être compliqué de faire cohabiter les 2 API : pour contourner le bug et l'absence de setClipping, je ferais personnellement le cropping en AWT et je convertirais l'image en SWT ensuite.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut
    Oui je m'étais tourné vers cette solution de passer du SWT au Awt et vice versa, en espérant mieux...
    Après pas mal de galère ce code fonctionne a peu pres :
    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
     
    private void paint(GC gc)
    {
    ...
     
                            screenImage = new Image(getDisplay(), clientRect.width,
    					clientRect.height);
     
    			BufferedImage awtImage = new BufferedImage(clientRect.width,
    					clientRect.height, BufferedImage.TYPE_INT_ARGB);
    			Graphics g = awtImage.getGraphics();
    			g.setColor(new java.awt.Color(TRANSPARENT_COLOR));
    			g.fillRect(0, 0, clientRect.width, clientRect.height);
    			g.setClip(clientRect.x, clientRect.y, clientRect.width,
    					clientRect.height);
    			g.drawImage(ImageUtils.convertToAWT(sourceImage.getImageData()),
    					destRect.x, destRect.y, destRect.width, destRect.height,
    					imageRect.x, imageRect.y, imageRect.width,
    					imageRect.height, null);
    			try {
    				screenImage = new Image(getDisplay(),
    						ImageUtils.convertToSWT(awtImage));
    				// imgLabel.setImage(img);
    			} catch (Exception e) {
    				System.err
    						.println("Unable to convert BufferedImage to SWT image.");
    				e.printStackTrace();
    			}
     
    			gc.drawImage(screenImage, 0, 0);
    C'est moche mais bon...
    Merci de ton aide en tout cas.

Discussions similaires

  1. Commentaire d'une image sous Firefox
    Par fabrice1596 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 09/06/2005, 11h59
  2. comment créer une image sous forme d'eclipse(ronde)
    Par unix27 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/05/2005, 22h16
  3. Dessiner une image en arrière plan d'1 MDI Main Frame
    Par Yacine95000 dans le forum MFC
    Réponses: 3
    Dernier message: 14/06/2004, 10h22
  4. Sauvegarde d'une image sous un autre format
    Par gandf dans le forum C++Builder
    Réponses: 4
    Dernier message: 24/02/2004, 09h50
  5. Affichage d'une image sous linux
    Par Braim dans le forum x86 32-bits / 64-bits
    Réponses: 5
    Dernier message: 25/03/2003, 10h41

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