wxPython图像相关处理

一.wx.Image和wx.Bitmap   
    wxPython主要有两个图像相关的类:wx.Image和wx.Bitmap 二者分工不一样
    wx.Image用于加载、处理、保存图片,而wx.Bitmap负责将图像显示到屏幕上,wx.Bitmap没有修改图片的api。

一、加载图片:
加载一个png图片:
image = wx.Image("image.png",wx.BITMAP_TYPE_PNG)
若加载图片格式不肯定,可使用wx.BITMAP_TYPE_ANY.

二、wx.Image转成wx.Bitmap
可使用:bitmap = wx.Image("image.png",wx.BITMAP_TYPE_PNG).ConvertToBitmap()
部分文章使用:
bitmap = wx.BitmapFromImage(image)
来转换,此方法已经被过期,使用此方法会有警告信息。

三、显示图像:wx.StaticBitmap(panel,-1,bitmap)
 html

二.基于wx.Image的图像处理

一、特别注意:图像处理api不在原图上修改,而是生成新的实例
使用wx.Image下面的api处理的时候,一开始被坑了,发现没任何效果,后来招到缘由。例如调整大小,必需要写成:image = image.Scale(100,100)  ,写成image.Scale(100,100)没有效果。不会在原图上修改,而好似返回一个新的实例。不光Scale如此,其余的api也是同理。这个千万要注意。

二、调整大小
image.Scale(w/2,h/2)   这个指令为:缩小图片文件名为“image”的图片到原图的一半,若是是放大,就乘上要放大的倍数!
    这里缩放的前提是要获得原图像的Width和Height,能够用GetWidth()和GetHeight()方法获取原图的Width和Height。
    例如获取原图名为image的Width和Height,能够这样作:w = image.GetWidth(),h = image.Height()。这样作完的w,h值就是原图的Width和Height.

三、图像水平和垂直翻转:
    Mirror(horizontally = True),这个返回一个镜像图像。
    水平翻转image:image.Mirror(horizontally = True)

    垂直翻转image:image.Mirror(horizontally = Flase)


四、改变原图的尺寸,能够变成本身想要的任意大小:R额scale(Width,height),
    如:image.Rescale(200,150),这个指令执行后会将原图的Width=200,height=150,以下图:

这个方法能够用做任意缩放图像的处理方式之一!!

五、顺时针或逆时针旋转90度:Rotate90(clockwise = True/False),当clockwise=True时,顺时针旋转,clockwise=False时,图像逆时针旋转。以下图:




六、任意角度旋转,Rotate(angle,rotationCentre,interpolating = True,offsetAfterRotation = None),返回旋转原图后的一个新的图像。
angle:这是一个浮点数,表明旋转的弧度,而不是度数!(底下附上弧度和角度之间的换算关系)
rotationCentre:旋转的的中心,是一个wx.Point。
interpolating:设置一个较慢而精准的算法被使用。该值为True时,该算法被使用!
offsetAfterRotation:也是一个wx.Point,一个坐标点,代表旋转后的图像应该移位多少。
注意:任何没有被覆盖的空白像素会被设置成为黑色!!!

例子片断代码以及效果图以下:
rota = wx.Point(image.GetWidth(),image.GetHeight())
image3 = image.Rotate(3.14152/4,rota,interpolating = True)
wx.StaticBitmap(panel,-1,wx.BitmapFromImage(image3),pos = (300,0))
(旋转45度后的效果图):

(旋转90度后的效果图,图片像素都有被覆盖到,因此没有黑色块!)



附加:弧度和角度之间的换算:
一个平角是 π 弧度,即:180度=π弧度 
由此可知: 
     1度=π/180 弧度 ( ≈0.017453弧度 ) 
所以,获得 把度化成弧度的公式: 
     弧度=度×π/180 
例如: 
      90°=90×π/180 =π/2 弧度 
      60°=60×π/180 =π/3 弧度 
      45°=45×π/180 =π/4 弧度 
      30°=30×π/180 =π/6 弧度 
      120°=120×π/180 =2π/3 弧度 算法

本文大部分文字基于:http://blog.chinaunix.net/uid-29127275-id-3922307.html
本人根据本身的经验作部分添加、修改api

相关文章
相关标签/搜索