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

wxPython Discussion :

WX.python Rotation d'une image dans un panneau


Sujet :

wxPython

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    indépendant
    Inscrit en
    Juin 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : indépendant
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 26
    Points : 0
    Points
    0
    Par défaut WX.python Rotation d'une image dans un panneau
    Bonjour

    Alors voila, dernièrement, j'ai eu l'idée tordue de créer une petite interface qui gère un système plus complexe pour Poser (smith micro).

    L'idée est simple: un panneau s'ouvre, d'un coté, des sliders prépositionnés, de l'autre une image qui pivote suivant les informations extraites du système de base.


    Je suis un noob complet, mais j'ai réussi!

    Le problème, c'est que le code a une sale gueule, il est lent et bourré de truc gênent:

    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
    class qui_gere_l_image(wx.Panel):
    	def __init__(self, parent):
    		wx.Panel.__init__(self, parent, -1, size=(256, 256), pos=(400, 150))
    		self.SetBackgroundColour(wx.Colour(74,74,74))
    		bitmap=wx.Bitmap(os.path.join(os.path.dirname(poser.ScriptLocation()), "imagequitourne.png"))
    		img = bitmap.ConvertToImage()
    		img_centre = wx.Point( img.GetWidth()/2, img.GetHeight()/2 )
    		imgr = img.Rotate( valeurextraite, img_centre )
    		imgr_center = (wx.Point( (128 - imgr.GetWidth()/2), (128 - imgr.GetHeight()/2) ))
    		im = imgr.ConvertToBitmap()
    		self.Refresh()
    		bmp = wx.StaticBitmap(self, bitmap=im)
    		bmp = bmp.SetPosition((imgr_center))
     
     
     
     
     
    class MainWindow(wx.Dialog):
    	def __init__(self, parent):
    		wx.Dialog.__init__(self, parent, -1, titre, size=(800, 600), style=wx.DEFAULT_DIALOG_STYLE)
    		panel = wx.Panel(self, -1, size=(128, 128), pos=(400, 150))
    		bitmap=wx.Bitmap(os.path.join(os.path.dirname(poser.ScriptLocation()), "Font.jpg"))
    		sizer = wx.BoxSizer(wx.VERTICAL)
    		panel.SetSizer(sizer)
    		sizer1 = wx.BoxSizer(wx.HORIZONTAL)
    		self.aire = qui_gere_l_image(panel)
    		sizer.Add(self.aire)
    		self.SetBackgroundColour(wx.Colour(74,74,74))
    		panel.Fit()

    C'est moche, non?
    L'idée de bas est simple:
    J'ouvre une fenêtre avec wx.Dialog, en parallèle, je gère une image avec wx.Panel, et j'ajoute le résultat dans le cadre principal!

    La, c'est la théorie,, 2 problèmes viennent se superposer:

    -Dans le système de gestion de l'image, je suis oblige d'extraire 2 fois le centre, sinon l'image pivote subit des translations (a causes des bord) dans son cadre!

    -Dans la fenêtre principal, je suis oblige de de créer un panel dans lequel j’enserre le......panel qui gère l'image!

    Le résultat, c'est un code qui est lent, lourd, redondant et qui est, je trouve, particulièrement moche!

    Savez vous comment:
    -faire une rotation sans que le bords du cadre ne fassent partir l'image en sucette?
    -Insérer l'image dans la fenêtre principal sans que celle ci ne demande un stupide "panel" supplémentaire!


    Autre problèmes:
    -je ne peut pas insérer d'image de fond sans que les sliders deviennent inaccessible.
    -mon image tournant utilise un canal Alpha, mais je n'est pas encore inséré la commande pour l'utiliser, j'ai peur des performances.


    A l'origine, je voulais que se soit l'image qui servent de commande, mais je suis limité par Poser à PIL et WXimage, je ne dis pas de bêtises en pensant que c'est impossible avec ses trucs?


    Merci de votre attentions, et encore pardon, je débute en python GUI.

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    indépendant
    Inscrit en
    Juin 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : indépendant
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 26
    Points : 0
    Points
    0
    Par défaut
    J'ai dis des bétises?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    indépendant
    Inscrit en
    Juin 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : indépendant
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 26
    Points : 0
    Points
    0
    Par défaut
    Heu..
    Meme pas un petit "c'est d'la merde ton truc!"?


    Help?

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    indépendant
    Inscrit en
    Juin 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : indépendant
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 26
    Points : 0
    Points
    0
    Par défaut
    C'est la section "cadavre du forum"?

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Je n'ai jamais utilisé wx mais, ému par tant de persévérance, je me suis penché sur ton code.

    Je constate que tu charges l'image en tant que bitmap pour la convertir en image et la reconvertir en bitmap pour l'afficher.

    D'après la doc, un wx.Bitmap ne peut être modifiée [0] et il faut donc le convertir en image mais la doc dit aussi qu'une image peut être chargée directement à partir du fichier. [1] Tu pourrais donc supprimer la première conversion.

    Le fait que tu doives déterminer le centre de rotation de l'image pour éviter son déplacement lors de la rotation est tout à fait normal, le contraire serait surprenant d'ailleurs et le calcul de ce centre est insignifiant en temp de travail. Bien inférieur au centième de seconde.

    Si la redondance du code t'ennuie, crée une fonction qui te retourne le centre d'une image et qui fera, elle, appel à une autre fonction qui retourne les dimensions de l'image.


    C'est tout ce que je peux dire en l'état.

    Je te fais aussi remarquer que tu as un nom non défini dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		imgr = img.Rotate( valeurextraite, img_centre )   # valeurextraite ?

    [0] http://www.wxpython.org/docs/api/wx.Bitmap-class.html
    [1] http://www.wxpython.org/docs/api/wx.Image-class.html

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    indépendant
    Inscrit en
    Juin 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : indépendant
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 26
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Je n'ai jamais utilisé wx mais, ému par tant de persévérance, je me suis penché sur ton code.

    Je constate que tu charges l'image en tant que bitmap pour la convertir en image et la reconvertir en bitmap pour l'afficher.

    D'après la doc, un wx.Bitmap ne peut être modifiée [0] et il faut donc le convertir en image mais la doc dit aussi qu'une image peut être chargée directement à partir du fichier. [1] Tu pourrais donc supprimer la première conversion.

    Le fait que tu doives déterminer le centre de rotation de l'image pour éviter son déplacement lors de la rotation est tout à fait normal, le contraire serait surprenant d'ailleurs et le calcul de ce centre est insignifiant en temp de travail. Bien inférieur au centième de seconde.

    Si la redondance du code t'ennuie, crée une fonction qui te retourne le centre d'une image et qui fera, elle, appel à une autre fonction qui retourne les dimensions de l'image.


    C'est tout ce que je peux dire en l'état.

    Je te fais aussi remarquer que tu as un nom non défini dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		imgr = img.Rotate( valeurextraite, img_centre )   # valeurextraite ?

    [0] http://www.wxpython.org/docs/api/wx.Bitmap-class.html
    [1] http://www.wxpython.org/docs/api/wx.Image-class.html

    Oh mon dieu!
    Une réponse!

    Merci merci, le noob que je suis va regarder tout ça!

Discussions similaires

  1. Rotation d'une image dans un UserForm
    Par VicomteRaoul dans le forum VBA Word
    Réponses: 5
    Dernier message: 26/12/2022, 12h28
  2. Mettre une Image dans un Text() sous Python 3
    Par sancho.poncho dans le forum Tkinter
    Réponses: 6
    Dernier message: 07/07/2012, 11h41
  3. Rotation d'une image dans un JButton
    Par Muetdhiver dans le forum 2D
    Réponses: 12
    Dernier message: 21/07/2008, 18h49
  4. Réponses: 2
    Dernier message: 25/03/2007, 21h49
  5. Comment améliorer la rotation à 45° d'une image dans un PictureBox
    Par ProgElecT dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 22/07/2006, 01h05

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