2010-03-23 18 views
9

Desidero caricare un'immagine, ridimensionarla a una determinata dimensione e dopo averla disegnata in una posizione specifica in un pannello.Come ridimensionare e disegnare un'immagine usando wxpython?

Tutto questo utilizzando wxpython.

Come posso farlo?

Grazie in anticipo!

+0

Grazie ragazzi, ci proverò più tardi e do la 'risposta accettato' –

risposta

24

wx.Image ha un metodo Scale che eseguirà il ridimensionamento. Il resto è normale codifica wx.

Ecco un esempio completo per voi.

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

è possibile fare un evento onClick sull'immagine? –

+1

Sì, associare solo EVT_LEFT_DOWN al controllo StaticBitmap. – FogleBird

+0

ha funzionato. grazie m8 :) –

0

Prima di tutto penso che il wxPython Docs e Demos fanno un lavoro grande che spiega come utilizzare le loro biblioteche, soprattutto perché le demo possono essere riprodotti con al volo per vedere l'effetto oppure è possibile ripristinare l'originale. Ecco il link di Windows per scaricare tutti i file:

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

Detto questo, ecco il codice di esempio dalla demo:

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 

Qui si mostra come caricare un'immagine e la visualizza su un pannello. Ci sono alcuni oggetti non spiegati qui, ma dovrebbe darti l'essenza generale.

+0

CHE NON ridimensiona qualsiasi immagine. Passa solo una dimensione che potrebbe essere omessa. – FogleBird

+0

Ah, sì, hai ragione, che ti consente solo di impostare un'altezza e una larghezza specifiche dell'immagine, come visualizzate, senza ridimensionare l'immagine. Risposta aggiornata :) – Fry

1

se si intende aggiungere l'immagine a una barra degli strumenti/listbook/ToolBook ecc .. si dovrà convertirlo in un bitmap (di solito solo bitmap consentito).

Per quanto ne so non è possibile ridimensionare una bitmap, quindi sarà necessario ridimensionare un'immagine prima e quindi convertirla.

Ecco un buon esempio http://markandclick.com/1/post/2011/12/wxpython-resize-embedded-bitmap-before-adding-it-as-a-tool.html

Ecco una copia dall'esempio:

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