1、处理基本的图像,大多数的应用程序都需要载入至少一个图像,这些图像存储在外部的文件中。样例包括工具栏图片、光标、图标、启始画面或仅仅用于装饰以增加一些时髦感的图像。传统上,使用图像工作的复杂性是不得不处理用于储存图像的不同的图片文件格式。幸运的是,wxPython内部为你做了所有的这些。你将使用相同的抽象概念来处理任何图像,而不用关心它的原始格式。,如何载入图像?,在wxPython中,图像处理是一个双主管系统,与平台无关的图像处理由类wx.Image管理,而与平台有关的图像处理由类wx.Bitmap管理。 外部文件格式由wx.Image装载和保存,而wx.Bitmap负责将图像显示到屏幕。 w
2、x.Image的构造函数: wx.Image(name, type=wx.BITMAP_TYPE_ANY, index=-1),如何载入图像?,参数name是图像文件的名字,参数type(类型)是处理器类型。type的ID可以是wx.BITMAP_TYPE_ANY或其它。如果你使用 wx.BITMAP_TYPE_ANY,那么wxPython将试图自动检测该文件的类型。如果你使用一个特定的文件类型,那么wxPython将使用该类型转换这个文件。,如何载入图像?,import wxfilenames = “image.bmp“, “image.gif“, “image.jpg“, “image.p
3、ng“ class TestFrame(wx.Frame):def _init_(self):wx.Frame._init_(self, None, title=“Loading Images“)p = wx.Panel(self)fgs = wx.FlexGridSizer(cols=2, hgap=10, vgap=10)for name in filenames:# load the image from the fileimg1 = wx.Image(name, wx.BITMAP_TYPE_ANY),如何载入图像?,# Scale the original to another wx
4、.Imagew = img1.GetWidth()h = img1.GetHeight()img2 = img1.Scale(w/2, h/2)# turn them into static bitmap widgetssb1 = wx.StaticBitmap(p, -1, wx.BitmapFromImage(img1)sb2 = wx.StaticBitmap(p, -1, wx.BitmapFromImage(img2),如何载入图像?,# and put them into the sizerfgs.Add(sb1)fgs.Add(sb2)p.SetSizerAndFit(fgs)s
5、elf.Fit()app = wx.PySimpleApp() frm = TestFrame() frm.Show() app.MainLoop(),wxPython 支持的图像文件格式,处理器类: wx.ANIHandler 类型标记: wx.BITMAP_TYPE_ANI 说明:动画光标格式。这个处理器只载入图像而不保存它们。 处理器类: wx.BMPHandler 类型标记: wx.BITMAP_TYPE_BMP 说明: Windows 和 OS/2 位图格式。 处理器类: wx.CURHandle 类型标记: wx.BITMAP_TYPE_CUR 说明: Windows 光标 图标格
6、式。 处理器类: wx.GIFHandler 类型标记: wx.BITMAP_TYPE_GIF 说明:图形交换格式。由于版权限制,这个处理器不保存图像。,wxPython 支持的图像文件格式,处理器类: wx.ICOHandler 类型标记: wx.BITMAP_TYPE_ICO 说明: Windows 图标格式。 处理器类: wx.IFFHandler 类型标记: wx.BITMAP_TYPE_IFF 说明:交换文件格式。这个处理器只载入图像,它不保存它们。 处理器类: wx.JPEGHandler 类型标记: wx.BITMAP_TYPE_JPEG 说明:联合图形专家组格式。 处理器类:
7、wx.PCXHandler 类型标记: wx.BITMAP_TYPE_PCX,wxPython 支持的图像文件格式,处理器类: wx.PNGHandler 类型标记: wx.BITMAP_TYPE_PNG 说明:便携式网络图形格式。 处理器类: wx.PNMHandler 类型标记: wx.BITMAP_TYPE_PNM 说明:只能载入 ASCII 或原始的 RGB 图像。图像被该处理器保存为原始的 RGB 。 处理器类: wx.TIFFHandler 类型标记: wx.BITMAP_TYPE_TIF 说明:标签图像文件格式。 处理器类: wx.XPMHandler 类型标记: wx.BITM
8、AP_TYPE_XPM 说明: XPixMap 格式。 处理器类:自动 类型标记: wx.BITMAP_TYPE_ANY 说明:自动检测使用的格式,然后调用相应的处理器。,创建image(图像)对象,wxPython使用不同的全局函数来创建不同种类的wx.Image对象。要创建一个有着特定尺寸的空图像,使用函数wx.EmptyImage(width,height)在这个被创建的图像中所有的像素都是黑色。要创建从一个打开的流或Python文件类对象创建一个图像,使用wx.ImageFromStream(stream,type=wx.BITMAP_TYPE_ANY, index=-1)。有时,根据
9、一个原始的RGB数据来创建一个图像是有用的,这使用wx.ImageFromData(width,height,data),data是一个字符串,每套连续的三个字符代表一个像素的红,绿,蓝的组分。这个字符串的大小应该是width*height*3。,创建bitmap(位图)对象,有几个方法可以创建一个位图对象。其中最基本的wx.Bitmap构造函数是 wx.Bitmap(name, type=wx.BITMAP_TYPE_ANY)。参数name是一个文件名。 如果bitmap类能够本地化地处理这个文件格式,那么它就处理,否则这个图像将自动地经由wx.Image载入并被转换为一个wx.Bitmap
10、实例。,创建bitmap(位图)对象,你可以使用方法wx.EmptyBitmap(width,height,depth=-1)来创建一个空的位图参数width和height是位图的尺度,depth是结果图像的颜色深度。,创建bitmap(位图)对象,函数wx.BitmapFromBits(bits, width, height, depth=-1)创建一个位图,参数bits是一Python字节列表。 通过使用wx.Bitmap的构造函数wx.BitmapFromImage(image, depth=-1),你可以将一个图像转换为一个位图。参数image是一个实际wx.Image对象,depth
11、是结果位图的颜色深度。,图像读取,使用GetWidth()和GetHeight()方法来查询图像的尺寸。你也可以使用方法GetRed(x, y), GetGreen(x, y), 和GetBlue(x, y)方法得到任意象素点的颜色值。这些颜色方法的返回值是一个位于0255之间的整数. 使用SetRGB(x, y, red, green, blue)来设置一个像素点的颜色,其中的x和y是这个像素点的坐标,颜色的取值位于0255之间。,图像读取,使用GetData()方法得到一大块区域中的所有数据。GetData()方法的返回值是一个大的字符串,其中的每个字符代表一个RGB元组,并且每个字符都可
12、被认为是一个0255之间整数值。这些值是有顺序的,第一个是位于像素点(0,0)的红色值,接下来的是位于像素点(0,0)的绿色值,然后是位于像素点(0,0)的蓝色值。再接下来的三个是像素点(0,1)的颜色值,如此等等。,GetData,def GetData(self): result = ” for y in range(self.GetHeight(): for x in range(self.GetWidth(): result.append(chr(self.GetRed(x,y) result.append(chr(self.GetGreen(x,y) result.append(ch
13、r(self.GetBlue(x,y) return result,wx.Image 的图像处理方法,ConvertToMono(r, g, b) :返回一个与原尺寸一致的 wx.Image ,其中所有颜色值为(r, g, b) 的像素颜色改为白色,其余为黑色。原图像未改变。 Mirror(horizontally=True) :返回原图像的一个镜像图像。如果 horizontally 参数是True ,那么镜像图像是水平翻转了的,否则是垂直翻转了的。原图像没有改变。 Replace(r1, g1, b1, r2, g2, b2) :改变调用该方法的图像的所有颜色值为 r1, g1, b1 的
14、像素的颜色为 r2, g2, b2 。,wx.Image 的图像处理方法,Rescale(width, height) :改变图像的尺寸为新的宽度和高度。原图像也作了改变,并且颜色按比例地调整到新的尺寸。 Rotate(angle, rotationCentre, interpolating=True, offestAfterRotation=None) :返回旋转原图像后的一个新的图像。参数 angle 是一个浮点数,代表所转的弧度。 rotationCentre 是一个 wx.Point ,代表旋转的中心。如果 interpolating 为 True ,那么一个较慢而精确的算法被使用。
15、offsetAfterRotation 是一个坐标点,表明在旋转后图像应该移位多少。任何未被覆盖的空白像素将被设置为黑色,或如果该图像有一个遮罩色,设置为遮罩色( mask color )。 Rotate90(clockwise=True) :按照参数 clockwise 的布尔值,控制图像按顺或逆时针方向作 90 度的旋转。 Scale(width, height) :返回一个原图像的拷贝,并按比例改变为新的宽度和高度。,设置图像的遮罩以指定一个透明的图像,使用SetMaskColor(red, green, blue)方法来设置一个图像遮罩,其中的red, green, blue定义图像遮
16、罩的颜色。如果你想关闭遮罩,可以使用SetMask(False),重置使用SetMask(True)。 使用方法 SetMaskFromImage(mask, mr, mg, mb)根据同一尺寸的另一图像设置遮罩在这种情况下,遮罩被定义为在遮罩wx.Image中有着颜色mr, mg, mb的所有像素,而不管在主图像中那些像素是什么颜色。,设置alpha值来指定一个透明的图像,alpha值是指定一个透明或部分透明图像的另一个方法。每个像素都有一个alpha值,取值位于0(如果图像在该像素是完全透明的)到255(如果图像在该像素点是完全不透明的)之间。你可以使用SetAlphaData(data)方法来设置alpha值。,