Я хочу загрузить изображение, изменить его размер до заданного размера и после этого нарисовать его в определенной позиции на панели.
Все это с помощью wxpython.
Как мне это сделать?
Заранее спасибо!
Я хочу загрузить изображение, изменить его размер до заданного размера и после этого нарисовать его в определенной позиции на панели.
Все это с помощью wxpython.
Как мне это сделать?
Заранее спасибо!
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()
StaticBitmap
после того, как он был показан один раз? т.е. если размер родительского окна изменен, размер StaticBitmap
должен быть изменен... Возможно ли это легко?
- person Basj; 27.01.2014
image = bitmap.ConvertToImage()
вместо image = wx.ImageFromBitmap(bitmap)
и result = wx.Bitmap(image)
вместо result = wx.BitmapFromImage(image)
.
- person Joachim; 08.06.2018
Во-первых, я думаю, что документы и демонстрации 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
Здесь показано, как загрузить изображение и отобразить его на панели. Некоторые объекты здесь не объясняются, но это должно дать вам общее представление.
Если вы имеете в виду добавление изображения на панель инструментов / список / книгу инструментов и т. Д., Вам придется преобразовать его в растровое изображение (обычно разрешены только растровые изображения).
Насколько я знаю, вы не можете изменить размер растрового изображения, поэтому вам придется сначала изменить размер изображения, а затем преобразовать его.
Вот хороший пример: 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()