如何使用wxpython调整和绘制图像?

14
我想加载一张图片,将其调整为给定的大小,然后在面板中特定的位置进行绘制。
所有这些都使用wxpython完成。
我该如何做呢?
提前致谢!

谢谢大家,我稍后会尝试并选择“采纳答案”。 - aF.
3个回答

33

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()

能否在图片上实现onClick事件? - aF.
1
是的,只需在 StaticBitmap 控件上绑定 EVT_LEFT_DOWN。 - FogleBird
谢谢@FogleBird,StaticBitmap一旦显示后是否可以调整大小?也就是说,如果父窗口被调整大小,StaticBitmap应该被调整大小...这很容易实现吗? - Basj
为什么如果您更改框架的样式,例如style=wx.NO_BORDER,图像就无法正确加载?我需要做什么才能在没有边框的窗口中加载图像? - TheRutubeify
2
在wxPython 4.0.1版本中,使用Python 2.7.13时,我收到了两个弃用警告。我使用了image = bitmap.ConvertToImage()代替image = wx.ImageFromBitmap(bitmap),并且使用了result = wx.Bitmap(image)代替result = wx.BitmapFromImage(image) - Joachim

1

首先,我认为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

这里展示了如何加载图像并在面板上显示它。这里有一些未经解释的对象,但它应该给你一个大致的概述。


那并不会调整任何图像的大小。它只是传递一个可以省略的尺寸。 - FogleBird
啊,是的,你说得对,那只是允许你设置图像的特定高度和宽度,如所显示的那样,而不是调整图像大小。回答已更新 :) - Fry

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接