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 :

enregistrer un canvas


Sujet :

wxPython

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 46
    Points : 33
    Points
    33
    Par défaut enregistrer un canvas
    Bonjour,

    Je développe un traceur de courbe. J'ai choisi d'utiliser PYOPENGL dans un canvas d'une interface wxpython.
    Je suis un peu sec pour trouver des info sur la méthode permettant d'enregistrer le canvas dans un fichier image (JPG ou autre).

    Quelqu'un saurait m'orienter?

    Merci d'avance

  2. #2
    Membre averti
    Avatar de Alain_72
    Inscrit en
    Août 2004
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 180
    Points : 342
    Points
    342
    Par défaut
    Un petit exemple...

    Tout se passe dans la méthode Save() de MyFrame...

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    #! /usr/bin/env python
    #-*- coding: utf-8 -*-
     
    import wx
     
    class Canvas(wx.Window):
        def __init__(self, parent):
            wx.Window.__init__(self, parent, -1, style=wx.SUNKEN_BORDER)
            self.SetBackgroundColour(wx.WHITE)
            self.lines = []
            self.x = self.y = 0
            self.SetMode("Draw")
     
            self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
            self.Bind(wx.EVT_LEFT_UP,  self.OnLeftUp)
            self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
            self.Bind(wx.EVT_MOTION, self.OnMotion)
            self.Bind(wx.EVT_PAINT, self.OnPaint)
     
        def SetMode(self, mode):
            self.mode = mode
            if self.mode == "Draw":
                self.SetCursor(wx.StockCursor(wx.CURSOR_PENCIL))
            else:
                self.SetCursor(wx.STANDARD_CURSOR)
     
        def OnPaint(self, event):
            dc = wx.PaintDC(self)
            self.DrawSavedLines(dc)
     
        def DrawSavedLines(self, dc):
            dc.BeginDrawing()
            dc.SetPen(wx.Pen(wx.BLUE, 3))
            for line in self.lines:
                for coords in line:
                    dc.DrawLine(*coords)
            dc.EndDrawing()
     
        def OnLeftDown(self, event):
            if self.mode == "Draw":
                self.curLine = []
                self.x, self.y = event.GetPositionTuple()
                self.CaptureMouse()
     
        def OnLeftUp(self, event):
            if self.HasCapture():
                self.lines.append(self.curLine)
                self.curLine = []
                self.ReleaseMouse()
     
        def OnRightUp(self, event):
            self.lines = []
            self.Refresh()
     
        def OnMotion(self, event):
            if self.HasCapture():
                dc = wx.ClientDC(self)
                dc.BeginDrawing()
                dc.SetPen(wx.Pen(wx.BLUE, 3))
                coords = (self.x, self.y) + event.GetPositionTuple()
                self.curLine.append(coords)
                dc.DrawLine(*coords)
                self.x, self.y = event.GetPositionTuple()
                dc.EndDrawing()
     
    class MyFrame(wx.Frame):
        def __init__(self, title):
            wx.Frame.__init__(self, None, -1, title=title, size=(400, 400))
            self.menuDoc = wx.Menu()
            self.menuFichier = wx.Menu()
            menuBar = wx.MenuBar()
     
            item = wx.MenuItem(self.menuFichier, id = -1, text = u"Enregistrer", help = u"Enregistrer l'image")
            self.ID_SAVE = item.GetId()
            self.menuFichier.AppendItem(item)
            item = wx.MenuItem(self.menuDoc, id = -1, text = u"Quitter", help = u"Quitter l'application")
            self.ID_QUIT = item.GetId()
            self.menuFichier.AppendItem(item)
            menuBar.Append(self.menuFichier, u"Fichier")
            self.SetMenuBar(menuBar)
            statBar = wx.StatusBar(self)
            self.SetStatusBar(statBar)
            sizer = wx.BoxSizer(wx.VERTICAL)
            self.canvas = Canvas(self)
            sizer.Add(self.canvas, 1, wx.EXPAND)
            self.SetSizer(sizer)
            self.SetAutoLayout(True) 
     
     
            wx.EVT_MENU(self, self.ID_SAVE, self.Save)
            wx.EVT_MENU(self, self.ID_QUIT, self.Quit)
            self.Bind(wx.EVT_CLOSE, self.Quit)
     
        def Quit(self, event):
            self.Destroy()
     
        def Save(self, event):
            imDC = wx.ClientDC(self.canvas)
            l, h = self.canvas.GetClientSizeTuple()
            bmp = wx.EmptyBitmap(l, h)
            DC = wx.MemoryDC(bmp)
            DC.Blit(0, 0, l, h, imDC, 0, 0)
            bmp.SaveFile("test.png", wx.BITMAP_TYPE_PNG)
     
    class MyApp(wx.App):
        def OnInit(self):
            f = MyFrame("Test")
            f.Show(True)
            self.SetTopWindow(f)
            return True
     
    app = MyApp()
    app.MainLoop()

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2008
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 46
    Points : 33
    Points
    33
    Par défaut
    Je pense qu'avec ca je devrais y arriver.

    Merci beaucoup !

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/12/2012, 07h46
  2. [HTML 5] Enregistrer le canvas dans le disque de l'utilisateur
    Par dot-_-net dans le forum Balisage (X)HTML et validation W3C
    Réponses: 0
    Dernier message: 12/05/2011, 12h51
  3. Enregistrer un canvas en jpg
    Par shaiHulud dans le forum Tkinter
    Réponses: 2
    Dernier message: 03/04/2011, 00h00
  4. Enregistrer une image à partir d'un canvas
    Par firehist dans le forum Ada
    Réponses: 4
    Dernier message: 18/02/2008, 12h01
  5. Réponses: 9
    Dernier message: 10/11/2005, 12h19

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