如何使用wxpython调整大小并绘制图像?

时间:2010-03-23 22:41:51

标签: python image wxpython resize draw

我想加载图片,将其大小调整为给定大小,然后将其绘制到面板中的特定位置。

所有这些都使用wxpython。

我该怎么做?

提前致谢!

3 个答案:

答案 0 :(得分:27)

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

答案 1 :(得分:1)

首先,我认为wxPython Docs和Demos做了伟大的工作,解释如何使用他们的库,特别是因为演示可以动态播放以查看效果,或者您可以恢复到原本的。这是下载所有文件的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

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

答案 2 :(得分:1)

如果您的意思是将图像添加到工具栏/列表簿/工具簿等中,则必须将其转换为位图(通常只允许使用位图)。

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

这是一个很好的例子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()