我想要显示图片其中的一部分,其他不想显示的画面不显示出来!摸索了好久,发现了以下两种方法:

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下图片局部显示的方法相关推荐

  1. 【jQuery Demo】图片由下至上逐渐显示

    无意中看到如何实现一张图片从下往上慢慢显现出来这个问题,弄了半天还是从上往下的效果,纠结了,最后还是提问人自己搞定了!不过哈哈,又学到一点知识! 1.下面是我自己做的效果(按钮可以点哦) 图片由下至上 ...

  2. java frame 不显示_win7系统下eclipse不显示JFrame界面的解决方法

    有不少win7旗舰版系统用户在使用eclipse的时候,遇到了不显示JFrame界面的情况,想必很多用户有遇到过这样的情况吧,接下来给大家讲解一下win7系统下eclipse不显示JFrame界面的解 ...

  3. android文本后面显示按钮,按下按钮后显示文本android

    我是新来的android,现在我想按下一个按钮,然后在屏幕上显示文本.这里是我的代码:按下按钮后显示文本android XML android:id="@+id/button1" ...

  4. 设置View平移动画:显示时从下往上显示,消失时从上往下消失,并且背景变暗,不可点击

    在做项目时常常遇到view平移动画的问题,现在记录下来,目前项目需要做的是一个选择时间的显示框: 首先设置两种位移动画: public void setAnimation() {//设置显示时的动画m ...

  5. gd剪裁圆形图片 php_PHP下图片裁剪、圆形、合并

    好把,标题就这样叫吧. 这个源码是从网上找的,不过源码是有问题的,我稍微做了修改,并且测试可行. 向原作者直径. 先上一个处理完的图形. 代码: /** *====================== ...

  6. wxpython界面切换_wxpython实现按钮切换界面的方法

    本文实例为大家分享了wxpython按钮切换界面的具体实现代码,供大家参考,具体内容如下 #-*- coding:utf-8 -*- import wx class TestFrame(wx.Fram ...

  7. wxpython滑动面板_wxpython实现按钮切换界面的方法

    本文实例为大家分享了wxpython按钮切换界面的具体实现代码,供大家参考,具体内容如下 #-*- coding:utf-8 -*- import wx class TestFrame(wx.Fram ...

  8. MATLAB中 下划线的显示问题

    在画图时,有时候x轴的某一类别包含下划线,比如"a_a", 但在显示的时候下划线是显示不出来的,这时候就需要在下划线前加一个转义符'\'. 通常可以这么处理: x = strrep ...

  9. 谷歌浏览器显示oracle,css让table不显示边框的代码在火狐和谷歌浏览器中无效

    css让table不显示边框的代码在火狐和谷歌浏览器中无效 发布时间:2013-06-26 17:12:32   作者:佚名   我要评论 在css中已经写好了使table不显示边框的代码,在ie浏览 ...

最新文章

  1. 2.初识Python
  2. flask 读取 csv
  3. Face Alignment at 3000 FPS via Regressing Local Binary Features(CVPR2014)读后感(first pass)
  4. Uva10285 Longest Run on a Snowboard
  5. php cannot load service mmap.,php swoole 安装失败
  6. 电路常识性概念(6)-VCC、VDD和VSS三种标号的区别
  7. JSP的四大作用域和九大内置对象
  8. 前端学习(3308):redux项目创建和概况
  9. argo 现水下永动机器人_水下永动机器人现身
  10. java conditionobject_Java AbstractQueuedSynchronizer源码阅读4-ConditionObject
  11. 在linux里flash自动转图片
  12. 冰点文库下载器Fish-v327-0221
  13. 将数学表达式表示为合法的c语言表达式,c语言练习题
  14. python中求平方根函数_Python中的平方根函数有什么问题?
  15. 计算机安全模式怎么消除计,大神为你解说win7系统解除word安全模式的妙计
  16. javaspringboot面试,挑战华为社招
  17. 灰度发布、蓝绿部署、金丝雀都是啥?
  18. Python教程三:使用Flask搭建web服务
  19. 剪不断理还乱--C#重载/重写/覆盖
  20. Android 开发基于 Jenkins 实现持续集成

热门文章

  1. 飞鸽传书2014提前发布?
  2. Win7和Vista移动设备正常弹出
  3. 一些比较有用的SQL操作,2011最新整理
  4. 飞鸽传书(IPMSG)的主要工作原理
  5. 内向的人怎样改善人际关系(三)
  6. 我看中国软件---问题篇
  7. 谈新手对CString的使用
  8. 用VC++6.0 Sockets API实现聊天室程序
  9. 干得最多最累,工资还不如新人
  10. 重磅!百度小程序成立开源联盟