wxpython显示图片_wxpython下图片局部显示的方法
我想要顯示圖片其中的一部分,其他不想顯示的畫面不顯示出來!摸索了好久,發現了以下兩種方法:
1、畫個矩形(或其他圖形也行)把你不想顯示出來的畫面遮住!如何遮呢?就是先加載圖片,接著再在想要遮住的地方畫圖。
2、使用設備上下文的SetClippingRegion(w,y,width,height)方法,下面是摘自《WxPython In Action》中的一段(注意理解“部分重繪”這個概念:個人理解為局部刷新):
你通常會想只將繪制更新到設備上下文的特定區域。這通常是在考慮到性能的原因時,特別是如果你知道一個大的或復雜的圖形只需要部分重繪時。這種重繪被稱為“clipping”,并且相應的設置方法是
SetClippingRegion(x,?y,?width,?height)。
其中,參數x,y是左上角的坐標,width和height是矩形區域的尺寸。一旦設置了,繪制處理將只發生在指定的區域。
要解除這個設置,可以使用DestroyClippingRegion()方法。要讀取當前的clip區域,使用方法GetClippingBox(),它返回一個(x,?y,?width,?height)元組。
下面是兩種方法如何實現的代碼:
程序一:遮蓋的方法:
1 import wx
2 class RectangleWindow(wx.Window):
3???? def __init__(self,event,image):
4???????? wx.Window.__init__(self,event)
5???????? self.photo = image.ConvertToBitmap()
6???????? self.Bind(wx.EVT_PAINT,self.OnPaint)
7
8???? def OnPaint(self,event):
9???????? DC = wx.PaintDC(self)
10???????? brush = wx.Brush("white")
11???????? DC.SetBackground(brush)
12???????? DC.Clear()
13
14???????? pen = wx.Pen("white")
15???????? #!!OR like this way:pen = wx.Pen("reg",1,sytle = wx.TRANSPARENT)#
16???????? #pen = wx.Pen("reg",1,wx.TRANSPARENT)
17???????? DC.SetPen(pen)
18
19???????? DC.DrawBitmap(self.photo,10,10,True)
20???????? DC.DrawBitmap(self.photo,200,10,True)
21???????? DC.DrawRectangle(240,40,60,50)
22
23 class RectangleFrame(wx.Frame):
24???? def __init__(self):
25???????? wx.Frame.__init__(self,None,title = "Draw Rectangle Frame",size =?(400,300),)
26???????? img = wx.Image("E6.jpg")
27???????? RectangleWindow(self,img)
28
29 if __name__ == "__main__":
30???? app = wx.App()
31???? RectangleFrame = RectangleFrame()
32???? RectangleFrame.Show()
33???? app.MainLoop()
運行效果如下圖:
程序二:選擇性顯示的方法:
1 import wx
2 class ClipWindow(wx.Window):
3???? def __init__(self,ent,image):
4???????? wx.Window.__init__(self,ent)
5???????? self.photo = image.ConvertToBitmap()
6
7???????? self.Bind(wx.EVT_PAINT,self.Paint)###
8???? def Paint(self,event):###
9???????? DC = wx.PaintDC(self)
10???????? brush = wx.Brush("white")
11???????? DC.SetBackground(brush)
12???????? DC.Clear()
13
14???????? DC.DrawBitmap(self.photo,10,10,True)
15???????? DC.SetClippingRegion(370,95,50,40)
16???????? DC.DrawBitmap(self.photo,300,10,True)
17
18
19 class ClipFrame(wx.Frame):
20???? def __init__(self):
21???????? wx.Frame.__init__(self,None,title = "SetClippingRegion",pos = (0,??? 0),size = (600,400))
22???????? #panel = wx.Panel()
23???????? img = wx.Image("qq1.png")
24???????? ClipWindow(self,img)
25
26 if __name__ == "__main__":
27???? app = wx.App()
28???? ClipFrame = ClipFrame()
29???? ClipFrame.Show()
30???? app.MainLoop()
效果如下圖:
小結:
第一種方法比較麻煩,如果你想顯示的的部分比較少的話,就需要大面積的畫圖去遮住你不想顯示的圖像,而且還要定位到哪里要被遮住,
再一個就是畫完圖之后,自己畫的圖會存在邊框線條,看起來很不自然,我們需要對其進行邊框處理,方法有二(程序一中的第14--17行):
1、把wx.Pen的顏色屬性設置為白色(wx.Pen = (colour = "white"))
2、把wx.Pen的類型屬性設置為透明:wx.Pen = (colour = "red",width = 1,style = wx.TRANSPARENT),這里把顏色設置為紅色是為了方便觀察,但也不能省略,省略不寫的話就會報錯。
第二種方法就比較簡單,且針對性比較強,想要哪里顯示就顯示哪里,無需其他的后續處理,但有一個缺陷就是顯示的局部形狀只能是矩形,而不能其他的形狀。
這兩種方法的共同缺點就是都只能是在一個矩形的范圍內進行處理操作。
閱讀(457) | 評論(0) | 轉發(0) |
總結
以上是生活随笔為你收集整理的wxpython显示图片_wxpython下图片局部显示的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多台工作站搭建MPI并行环境
- 下一篇: Python入门二(1)