2010-03-23 5 views
9

Je veux charger une image, la redimensionner à une taille donnée et après l'avoir dessiné dans une position spécifique dans un panneau.Comment redimensionner et dessiner une image en utilisant wxpython?

Tout cela en utilisant wxpython.

Comment puis-je le faire?

Merci d'avance!

+0

Merci les gars, je vais essayer plus tard et donner la « réponse acceptée » –

Répondre

24

wx.Image a une méthode Scale qui effectuera le redimensionnement. Le reste est un codage wx normal.

Voici un exemple complet pour vous.

import wx 

def scale_bitmap(bitmap, width, height): 
    image = wx.ImageFromBitmap(bitmap) 
    image = image.Scale(width, height, wx.IMAGE_QUALITY_HIGH) 
    result = wx.BitmapFromImage(image) 
    return result 

class Panel(wx.Panel): 
    def __init__(self, parent, path): 
     super(Panel, self).__init__(parent, -1) 
     bitmap = wx.Bitmap(path) 
     bitmap = scale_bitmap(bitmap, 300, 200) 
     control = wx.StaticBitmap(self, -1, bitmap) 
     control.SetPosition((10, 10)) 

if __name__ == '__main__': 
    app = wx.PySimpleApp() 
    frame = wx.Frame(None, -1, 'Scaled Image') 
    panel = Panel(frame, 'input.jpg') 
    frame.Show() 
    app.MainLoop() 
+0

est-il possible de faire un événement onClick sur l'image? –

+1

Oui, il suffit de lier EVT_LEFT_DOWN sur le contrôle StaticBitmap. – FogleBird

+0

cela a fonctionné. merci m8 :) –

0

Tout d'abord, je pense que le wxPython Docs et démonstrations font un travail grand expliquant comment utiliser leurs bibliothèques, en particulier parce que les démos peuvent être lus avec à la volée pour voir l'effet ou vous pouvez revenir à l'original. Voici le lien Windows pour télécharger tous les fichiers:

http://www.wxpython.org/download.php#binaries

Cela dit, voici le code exemple de la démo:

def runTest(frame, nb, log): 
    bmp = wx.Image(opj('bitmaps/image.bmp'), wx.BITMAP_TYPE_BMP).ConvertToBitmap() 
    gif = wx.Image(opj('bitmaps/image.gif'), wx.BITMAP_TYPE_GIF).ConvertToBitmap() 
    png = wx.Image(opj('bitmaps/image.png'), wx.BITMAP_TYPE_PNG).ConvertToBitmap() 
    jpg = wx.Image(opj('bitmaps/image.jpg'), wx.BITMAP_TYPE_JPEG).ConvertToBitmap() 

    panel = wx.Panel(nb, -1) 

    pos = 10 
    wx.StaticBitmap(panel, -1, bmp, (10, pos), (bmp.GetWidth(), bmp.GetHeight())) 

    pos = pos + bmp.GetHeight() + 10 
    wx.StaticBitmap(panel, -1, gif, (10, pos), (gif.GetWidth(), gif.GetHeight())) 

    pos = pos + gif.GetHeight() + 10 
    wx.StaticBitmap(panel, -1, png, (10, pos), (png.GetWidth(), png.GetHeight())) 

    pos = pos + png.GetHeight() + 10 
    wx.StaticBitmap(panel, -1, jpg, (10, pos), (jpg.GetWidth(), jpg.GetHeight())) 

    return panel 

Ici, il montre comment charger une image et l'affiche sur un panneau. Certains objets ne sont pas expliqués ici, mais ils devraient vous donner l'essentiel.

+0

Cela ne veut pas redimensionner une image. Il passe juste une taille qui pourrait tout aussi bien être omise. – FogleBird

+0

Ah, oui vous avez raison, cela vous permet juste de définir une hauteur et une largeur spécifiques de l'image, comme affiché, ne pas redimensionner l'image. Réponse mise à jour :) – Fry

1

Si vous voulez dire ajouter l'image à une barre d'outils/listbook/etc .. Toolbook vous devrez le convertir en un bitmap (bitmaps habituellement seulement autorisé). Autant que je sache, vous ne pouvez pas redimensionner un bitmap, vous devrez donc redimensionner une image avant de la convertir.

Voici un bon exemple http://markandclick.com/1/post/2011/12/wxpython-resize-embedded-bitmap-before-adding-it-as-a-tool.html

Voici une copie de l'exemple:

def getFolderBitmap(): 
    img = folder_icon.GetImage().Rescale(scaleW, scaleH) 
    return img.ConvertToBitmap() 
Questions connexes