2010-03-23 32 views
9

Tôi muốn tải một hình ảnh, thay đổi kích thước nó thành một kích thước nhất định và sau khi vẽ nó ở một vị trí cụ thể trong một bảng điều khiển.Làm thế nào để thay đổi kích thước và vẽ một hình ảnh bằng cách sử dụng wxpython?

Tất cả điều này sử dụng wxpython.

Tôi có thể làm như thế nào?

Cảm ơn trước!

+0

nhờ guys, tôi sẽ thử nó sau này và cung cấp cho các 'Câu trả lời được chấp nhận' –

Trả lời

24

wx.Image có phương thức Scale sẽ thực hiện thay đổi kích thước. Phần còn lại là mã hóa wx bình thường.

Đây là ví dụ hoàn chỉnh cho bạn.

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

có thể thực hiện sự kiện onClick trên hình ảnh không? –

+1

Vâng, chỉ cần ràng buộc EVT_LEFT_DOWN trên điều khiển StaticBitmap. – FogleBird

+0

nó hoạt động. thanks m8 :) –

0

Đầu tiên tôi nghĩ rằng các tài liệu và demo của wxPython thực hiện một công việc tuyệt vời là giải thích cách sử dụng thư viện của họ, đặc biệt là vì trình diễn có thể được phát khi đang di chuyển để xem ảnh hưởng hoặc bạn có thể hoàn nguyên về bản gốc. Dưới đây là liên kết Windows để tải về tất cả các file:

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

Điều đó nói rằng, đây là mã ví dụ từ bản demo:

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 

đây nó cho thấy làm thế nào để tải một hình ảnh và hiển thị nó trên bảng điều khiển. Có một số đối tượng không được giải thích ở đây, nhưng nó sẽ cho bạn ý chính.

+0

Đó không phải làm thay đổi kích thước bất kỳ hình ảnh nào. Nó chỉ vượt qua một kích thước mà chỉ có thể cũng được bỏ qua. – FogleBird

+0

Ah, vâng bạn nói đúng, chỉ cho phép bạn đặt chiều cao và chiều rộng cụ thể của hình ảnh, như được hiển thị, không thay đổi kích thước hình ảnh. Đã cập nhật câu trả lời :) – Fry

1

Nếu bạn muốn thêm hình ảnh vào thanh công cụ/danh sách/sổ công cụ, v.v., bạn sẽ phải chuyển đổi hình ảnh thành bitmap (thường chỉ cho phép bitmap).

Theo như tôi biết bạn không thể tái kích thước một bitmap, do đó bạn sẽ phải thay đổi kích thước một hình ảnh trước và sau đó chuyển đổi nó.

Dưới đây là một ví dụ tốt http://markandclick.com/1/post/2011/12/wxpython-resize-embedded-bitmap-before-adding-it-as-a-tool.html

Dưới đây là một bản sao từ ví dụ:

def getFolderBitmap(): 
    img = folder_icon.GetImage().Rescale(scaleW, scaleH) 
    return img.ConvertToBitmap() 
Các vấn đề liên quan