Как изменить размер и нарисовать изображение с помощью wxpython? - PullRequest
11 голосов
/ 24 марта 2010

Я хочу загрузить изображение, изменить его размер до заданного размера и затем нарисовать его в определенной позиции на панели.

Все это с помощью wxpython.

Как я могу это сделать?

Заранее спасибо!

Ответы [ 3 ]

27 голосов
/ 24 марта 2010

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 голос
/ 11 декабря 2011

Если вы имеете в виду добавление изображения на панель инструментов / список книг / книгу инструментов и т. Д., Вам придется преобразовать его в растровое изображение (обычно разрешены только растровые изображения).

Насколько я знаю, вы не можете изменить размер растрового изображения, поэтому вам придется изменить размер изображения и затем преобразовать его.

Вот хороший пример 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()
1 голос
/ 24 марта 2010

Прежде всего, я думаю, что Документы и Демоверсии 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

Здесь показано, как загрузить изображение, и отобразить его на панели. Есть некоторые объекты, которые здесь не описаны, но они должны дать вам общее представление.

...