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

wxWidgets Discussion :

Zoomer avec wxWidgets


Sujet :

wxWidgets

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 66
    Points : 44
    Points
    44
    Par défaut Zoomer avec wxWidgets
    Bonjour,

    Ma question n'est pas directement liée à wxWidgets, mais comme c'est cet environnement que j'utilise, je pose quand même ma question ici : j'ai du mal à comprendre le principe des zooms avec les DeviceContext. Comment en particulier faire un zoom d'une bitmap ?

    Toute info sur le sujet est la bienvenue.

    Merci d'avance,

    Zorglbug

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    Si je dis pas de bêtises, c'est assez simple, tu passe ton facteur d'échelle à la fonction wxDC::SetUserScale() et ensuite toutes les opérations d'affichage, comme l'affichage d'un bitmap via la fonction wxDC:rawBitmap() par exemple, seront automatiquement mis à l'échelle.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 66
    Points : 44
    Points
    44
    Par défaut
    Bonsoir Sylvain,

    Et merci pour l’info.

    J’ai essayé, et je ne suis qu’à moitié parvenu à mes fins. Mais le problème vient sans doute de ma mauvaise compréhension des chaînes d’évènements liés à l’affichage, ainsi qu’aux principes des Device Context.

    Je décris mon code, et son comportement :

    Je construis un objet « ScrollView » qui dérive de « wxScrolledWindow »

    Dans cet objet, je déclare deux méthodes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      void OnPaint(wxPaintEvent& event) ;
       void OnDraw(wxDC* dc);
    et une variable :

    Dans la table d’évènements de cet objet, je déclare la fonction « OnPaint » :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	EVT_PAINT(ScrollView::OnPaint)
    Dans la fonction OnPaint, j’écris le code suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void ScrollView::OnPaint(wxPaintEvent& event)
    {
    	wxBufferedPaintDC dc(this) ;				
                 OnDraw(&dc) ;
    }
    Dans la function OnDraw j’écris le code suivant :

    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
    void ScrollView::OnDraw(wxDC* dc)
    {
    	wxClientDC dc2(this);
    	float zoomFactor = (float)2.0 ;
     
    	GetViewStart( &_displayedScreen.x, &_displayedScreen.y );
    	GetClientSize( &_displayedScreen.width,  
                                    &_displayedScreen.height );
     
    	dc->DrawBitmap(*_bmp, - _displayedScreen.x, - 
                                                     _displayedScreen.y, true) ;
    	dc2.SetUserScale(zoomFactor, zoomFactor);
    	dc2.Blit( -_displayedScreen.x,        
    	            -_displayedScreen.y,        
    		zoomFactor*_displayedScreen.width+_displayedScreen.x,    
    		zoomFactor*_displayedScreen.height+_displayedScreen.y,         
    		dc,     
    		0,          
    		0);         
    }
    La wxBitmap bmp est initialisée à l’aide de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	bmp = new wxBitmap("imageName", wxBITMAP_TYPE_JPEG) ;
    Le comportement que j’obtiens est le suivant :

    Quand je déplace les barres de scroll à l’aide de la souris, j’obtiens bien une image zoomée qui se déplace (La fonction OnPaint étant appelée en parmanence). Mais dès que je relâche la barre de scroll, c’est de nouveau l’image à l’échelle 1 qui s’affiche.

    J'ai du mal à comprendre ce qui se passe.

    Est-ce que vous verriez où se situe le problème, ou est-ce que vous pourriez me diriger vers des documentations qui expliquent bien tous ces mécanismes d'affichage ?

    Merci d'avance,

    Zorglbug

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 66
    Points : 44
    Points
    44
    Par défaut
    Bonsoir Sylvain,

    J'ai fini par résoudre mon problème, à force de tatonner. Je ne suis pas sûr de comprendre très bien comment ça marche, mais enfin, ça marche...

    Merci pour le coup de main.

    Zorglbug

Discussions similaires

  1. Dessiner avec wxWidgets
    Par SuperPat dans le forum wxWidgets
    Réponses: 5
    Dernier message: 24/02/2009, 01h06
  2. Toolbar avec wxwidgets
    Par zeleyou dans le forum wxWidgets
    Réponses: 4
    Dernier message: 03/02/2006, 21h12
  3. Problème d'exécution avec wxWidgets
    Par GLDavid dans le forum wxWidgets
    Réponses: 3
    Dernier message: 10/11/2005, 11h44
  4. Utilisation de la classe List de STL avec wxWidgets
    Par aoyou dans le forum wxWidgets
    Réponses: 7
    Dernier message: 10/03/2005, 18h41
  5. [debutant]probleme avec wxwidgets
    Par iwky dans le forum wxWidgets
    Réponses: 11
    Dernier message: 23/01/2005, 21h23

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