2010-03-23 93 views
9

我想加载一个图像,将其调整到一个给定的大小,并将其绘制在面板中的特定位置。如何使用wxpython调整大小并绘制图像?

所有这些使用wxpython。

我该怎么办?

在此先感谢!

+0

感谢球员,我会稍后尝试,并给出“接受的答案” – 2010-03-24 09:00:28

回答

24

wx.Image有一个Scale方法可以调整大小。其余的是正常的wx编码。

下面是一个完整的例子。

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

是否可以在图像上执行onClick事件? – 2010-03-24 16:36:51

+1

是的,只需绑定StaticBitmap控件上的EVT_LEFT_DOWN即可。它的工作原理是 – FogleBird 2010-03-24 16:56:55

+0

。谢谢m8 :) – 2010-03-24 20:39:26

0

首先我认为wxPython的文档和演示,做一个伟大的工作解释如何使用自己的音乐库,特别是因为演示可以播放上飞看到的影响,也可以恢复到原来的。下面是Windows的链接下载的所有文件:

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

这就是说,这里是从演示示例代码:

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 

这显示了如何加载图像,并将其显示在面板上。有些东西在这里没有解释,但它应该给你一般的要点。

+0

不调整任何图像的大小。它只是传递了一个可以省略的大小。 – FogleBird 2010-03-24 01:03:14

+0

嗯,是的,你是对的,只是允许你设置图像的特定高度和宽度,如图所示,而不是调整图像大小。回答更新:) – Fry 2010-03-24 15:58:32

1

如果你的意思是把图象到工具栏/ listbook/ToolBook的等等。你必须把它转换为位图(通常只允许位图)。

就我所知,您不能重新调整位图大小,因此您必须先调整图像大小然后再进行转换。

这里是一个很好的例子http://markandclick.com/1/post/2011/12/wxpython-resize-embedded-bitmap-before-adding-it-as-a-tool.html

这里是一个例子副本:

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