]> git.saurik.com Git - wxWidgets.git/blob - wxPython/tests/test_gcDrawBitmap.py
define ATTRIBUTE_PRINTF(m,n) and not just ATTRIBUTE_PRINTF as nothing when the compil...
[wxWidgets.git] / wxPython / tests / test_gcDrawBitmap.py
1 import wx
2 import math
3
4 ##import os; print "PID:", os.getpid(); raw_input("Press Enter...")
5
6 class TestPanel(wx.Panel):
7 def __init__(self, *args, **kw):
8 wx.Panel.__init__(self, *args, **kw)
9 self.Bind(wx.EVT_PAINT, self.OnPaint)
10
11 self.SetBackgroundColour("white")
12
13 # maskless image
14 self.bmp1 = getTest2Bitmap()
15
16 # give this one a mask
17 self.bmp2 = getTest2Bitmap()
18 self.bmp2.SetMaskColour("blue")
19
20 # now make one in which the opaque pixels from #2 are made
21 # partially transparent
22 bmp = getTest2Bitmap()
23 bmp.SetMaskColour("blue")
24 img = bmp.ConvertToImage()
25 img.InitAlpha()
26 self.bmp3 = img.ConvertToBitmap()
27 pixelData = wx.AlphaPixelData(self.bmp3)
28 if not pixelData:
29 raise RuntimeError("Failed to gain raw access to bitmap data.")
30 for pixel in pixelData:
31 red, green, blue, alpha = pixel.Get()
32 if alpha == 255:
33 pixel.Set(red, green, blue, 128)
34
35 ##self.bmp3 = wx.Bitmap("bitmaps/toucan.png")
36
37
38 def OnPaint(self, evt):
39 gc = wx.GraphicsContext.Create(wx.PaintDC(self))
40
41 # draw some lines to use as a background
42 gc.SetPen(wx.Pen("navy", 1))
43 x = y = 0
44 sz = self.GetSize()
45 while x < sz.width*2 or y < sz.height*2:
46 gc.StrokeLine(x,0, 0,y)
47 x += 20
48 y += 20
49
50
51 for bmp in [self.bmp1, self.bmp2, self.bmp3]:
52 # draw the plain bitmap
53 gc.DrawBitmap(bmp, 20,20,
54 bmp.GetWidth(), bmp.GetHeight())
55
56 # translate and scale by using the w, and h parameters
57 gc.Translate(100, 0)
58 gc.DrawBitmap(bmp, 20,20,
59 bmp.GetWidth()*1.5, bmp.GetHeight()*1.5)
60
61 # translate and scale using Scale()
62 gc.Translate(125, 0)
63 gc.PushState()
64 gc.Scale(0.75, 0.75)
65 gc.DrawBitmap(bmp, 20,20,
66 bmp.GetWidth(), bmp.GetHeight())
67 gc.PopState()
68
69 # translate and rotate
70 gc.Translate(125, 0)
71 gc.PushState()
72 gc.Rotate(math.radians(45))
73 gc.DrawBitmap(bmp, 20,20,
74 bmp.GetWidth(), bmp.GetHeight())
75 gc.PopState()
76
77 # move back to the left side, and down a row
78 gc.Translate(-350, 150)
79
80
81 def main():
82 app = wx.App(False)
83 frm = wx.Frame(None, size=(500,500))
84 pnl = TestPanel(frm)
85 frm.Show()
86 app.MainLoop()
87
88
89
90 #----------------------------------------------------------------------
91 from wx import ImageFromStream, BitmapFromImage
92 from wx import EmptyIcon
93 import cStringIO
94
95
96 def getTest2Data():
97 return \
98 '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00@\x00\x00\x00@\x08\x02\x00\
99 \x00\x00%\x0b\xe6\x89\x00\x00\x00\x03sBIT\x08\x08\x08\xdb\xe1O\xe0\x00\x00\
100 \x08\xeeIDATh\x81\xd5\x9aKl\x1b\xd7\x15\x86\xbf\xcb\xe1\xf0\xa1\xa1(\x91\x92\
101 (\xc9\x96T\xd9q,Ar\xdc\xbarb\xa0F\xd1\xb8\x81\xd3\xa0\xb0\x03gS\x04\xf0>\xd3\
102 \x14\x857Aw\x0e\x8a\x00\xc9*\xe821h\x04\xe8&\x01\xb2k\x10\x07E\xd0\x00u\xb2p\
103 \x16\x85\x1f\x01\x92\xc8\xae\xe3\x1a\xb2\xe5\xca\xa2%\xd3\xa6D\x89\xb4\x863\
104 \xb7\x8b\xa1\xa8!9\x1c\x0ei\xcaA\xff\x15E\xce=\xf7\xff\xcf9\xf71\xe7H\x80\
105 \xe4\xff\x19\xc1N\x19\x923\xa2\xa5\xe7\xc5\xa5\xce8NT"\xe0\xcd\xa0~\xbeV\x19\
106 \xfb\xb7\xdc\xdap\x9f\x02\xca\xb8\xe8\xf8|\xf0q\xe6\xad\xe3\xd1\xae\x8c\xb2\
107 \x00\xbf\xec\xc5k[\x7f\xca\xb3\xe5\x0f\x9dS\xd2\x86\x0c\x7f\x02l\xc7;\xd9;a+\
108 \xa9\x96aJ\x0c\x89\xe9\xe0\xa3]\xf1\xcdI\xb4 \xa3\x99\x00o\xeaNl\x06d\xed\
109 \x00&\xe4M\xb2&k\x16\xa6\xe4\x17\xd7\x00\xbe\x16/\xdb\x0f(\x044\x82I\xc21T\
110 \x05\xa1 T\x02\n\x81-;\x07\xc1w4<\x05\\l\xe6\xf5\xcd_M\xac"\xe6\n\xc6\xb0\
111 \xfc\xd0c\xb27\xc5\x01@%\x90 <J,I8\x8c\xa2\x11\xec#\x12G\x8d\xa0\x94eljp\xa1\
112 [\xa7\xaa\xb1\x80F\xec\xeb\xa8+\xf2\x03\x0f\xd2\x8dpJL\xc7P#(\t\xc2\xe3t\x8f\
113 \xa2\r\xd2U\x96!?\xf0^WN\x19\r\x04x\xfb^\xbc\xf68\xd4\x9dxE\x8ck\x04\x87\xe8\
114 \x1aE\xdbM\xbc"C\x93\x7f\xf5\xa9\xa1\xdd\x83L\x9eU\xda\x1cY\x85\xbf\xc99\xe0\
115 \xb8\x18[d}\x9e5[\xc6\x18\xb1\x9f\x82!Q}l\x8d\x02dk\xee\xdf6\x1c\x17c=\x84\
116 \x86\xe8\x1a\'\xf6G\xf9\xf5\xc2~\x06T/\rv\x10\x02\r\x7f\x7f\xe28\'o\xdf\xa3\
117 \xf0o\x1e^b\x19\x98-\xb2d`4\xdb\x8a\xea\x04\xfcH\xee\xb7\xf1\x0f\xf9\xdfuJ\
118 \x8b\xac\x03\x17\xd7\x9bh\xb0\x13\xc7\xf7\x1a\xa8fo\x9a\x18\x06\x96E \x80\
119 \xaa\xa2tbA\xd86\xcf\xad-\xfcV\x1b\x06f\x0b\xe5\xef\xa7\xf0\xca%\x7f\x02\xaa\
120 \xd9\x1b\x06\x0f\x1e\xb0\xb4D\xb1\x88\xa618HO\x0f\x81\xc7KF\xcbbe\x85L\x86\
121 \xb55\xde\xfb\xee.\x90)\x81\x0f\r>\x048\xd8\x0b\x91\xb6?|\xf5\x95>;\xcb\xca\
122 \n##\xcc\xcc\x10\x8d\x12\x89\xb4I\xbdb\xf3\xda5\xfd\xf2e\xee\xdc!\x1e\xe7\
123 \xfe}\xd6M\xee\xd1\\C3\x01n\xec\x81\xd9Y.]\xa2X\xa4T\xe2\xe9\xa7\xb1\xac\xaa\
124 Av2\x98f\xad1E\xf1\xca\xb7\xc9\xc9\xf4;\xef\xe8W\xaf\x96}\x91\xfe\x17\x7f8\
125 \xc4R\x89\xd9\x02\x02\x14AP\xd0\x1f$P\xad\xc1S@\xe3U{\xef\x1e\xcb\xcbHI\xa1\
126 \x80a 7\xd7\x99iR,\xb2\xb2\xc2\xfd\xfb\xac\xadUiP\x144\x8d\xbe>\xe2q"\x11w\
127 \x19\x85\x02\xab\xab\xe4\xf3\xdc\xbb\xc7\xea*\x7f\xcfp|\x88\xa5\x12\xd7\x8ah\
128 \x01\x92\nZ\x00\xadz`\x9b\x07\x99\xab\x83\x9d!r\xe2\xf4i\x1dPU\x12\t\xc6\xc7\
129 \x19\x1bcx\x98D\x02Uuy\xd8\x0e\xa6m_J,\xc9\x06,\x97\x98\xdb\xe0\'\x1b\xa4T\
130 \xa2\x81\xaa 4\x16\xd0\xca\xa6\x19\x8b\xb9S\xb7\xf1\xf6\xdbi\xe0\xc4\t]\xd3\
131 \xb8u\x8b\xf1q\xa6\xa7\x99\x98``\xc0]\x83\x13\xe7W9\xd2\xcd#\x8bE\x83\x9b\
132 \x8f\x18\r\x11\xaf\x0eB\x07\xde\x89\x0f\x1f\xf6b_\xc1\'\x9f\xa4\x8f\x1e\xd5s\
133 \xb9rv\x01\xc1 \xfd\xfd\xbe\xa60!g2o0\xbf\xc1`u\x10\x1al~\xbe\xddo{\xd7\'\
134 \xbe\xf8"](\xb0\xb8\xc8\xb5k|\xff=w\xefR(4\x1fu~\x15Kn\x05!cP\xb0\xc0y\x95\
135 \xe8T\x81\xa0\x82\x13\'\xf4\x93\'u\xd7\x9fT\x15\xc3`y\x99\xb99n\xdffe\xc5\
136 \xafMg\x10V,\xacM\xcan\x11h%\xfb\xed\x05Z\xc1\x993\xfa[o\xe9\x07\x0ep\xe8\
137 \x10\x9f~\xaa_\xb9R+\xe3\xf3\xcf\xd3\xaa\xca\xc6\x06\x8b\x8b\xdc\xbcI&\xe3k\
138 \x96J\x102\x06\xb76\xc8\x96\xd8\xd8\x14\xd0\x815p\xe1\x82\xbe\x7f?\xe1p\xf9x\
139 \xce\xe7\x81\xad\x1d\xd30tU\xadJ\xb3\xde^\xb2Yr9\xe6\xe7\x99\x9foa"\x13\xf2\
140 \x16\xd9\x12y\x8b\xca\xc1S\x8e\xc0\xe3\x16g\x04\xaaJ_\x1fO=\xc5\xbe}\xec\xdb\
141 \xc7\x9e=\xa4Rh\x1a\xc1 RV\xc5\xe1\xe3\x8f\xd3\x8a\xc2\xa3Gd2\xdc\xba\xd5\
142 \xc2,\x96\xa4$)J\x1eY\x94\\# .\xd9\'R\x9b\x15+E\xf1{\xab\xb3\x05\xe4\xf3d\
143 \xb3\xadMa\xcar\xb9 o\x02\x16\xce+\xd8f\x10:So\xeb8\xce\xaf\x02\x94$\x0fL\
144 \xeel\xb0\xf3\xdb\xef`\x83\x1f\xeb\x85\xc64Q\x14b1\x92\xc9\x16\x07n.\x03\xc8\
145 \x83\xc5\x93\x11Ps\xc5x\xf5U\xbdT"\x18$\x91`d\xa45S\x96\xc4\x94\xfc\xf9\xeei\
146 0\xedr\xc4\xb6\x0b\xa8\xbf =|\x88e\x11\n\x91H00\xf0\xb8\xf6\xb7W\x80\xeb\xf5\
147 \xce0PU\x92I\x86\x86H$Z\xb6y.w\xdc\xf9g\xc7\xfa\x035ht3}\xe1\x05]U\x19\x18`b\
148 \x82\xc9I\xbfw!\x1b_\xe6\x9f\xaf\xffr[\x044b\xff\xe2\x8bz(D\x7f?\x93\x93\xcc\
149 \xcc01\xd1N\x04j\xd0y\x01\x8d\xd8\xbf\xf4\x92\xde\xdb\xcb\x8e\x1d\xec\xda\
150 \xd5\xc2u\xba):,\xc0\x95}%m\xf6\xeee\xdf>v\xed\xf2z\xa1i\x86\x00(\xa0\x82b\
151 \x1fY\x9d\x14\xe0\xcd~j\x8a\x99\x19&\'I&\x1b\xbeR\xfa\x80\x021HB\xcc\xde\x81\
152 j\x05\x08!\xa5l~\x18G\xa3\xc4b\xe5\x0f\xaa\x8ah0\xe2\xd81]\x08\xfa\xfa\xcaI?\
153 5\xd5$m<\xcc\n\xf1<\xd8\x84\x130\x02\t\x08\xb9\x08\xf0\x89\xf1\xf1\xad\x0f\
154 \xf1x\xf9F"\xa5\xee\x0c\xc2\xbb\xef\xeaw\xee\x10\x0e3:\xea7\xe9]\xcdV\xa36\
155 \x02[M\xbe\n\xbc#`Y<|\xc8\xc2B\xf9\x1e\x96L\xb2c\x07\xbd\xbd[\x93\t\x91^_\
156 \xd7\x17\x16\xf8\xe1\x072\x19\xe2q\xc6\xc6\x18\x19!\x99\xf4bo\x9ad\xb3,,\x90\
157 \xcb\x95\x0f\xe9\xa1\xa1\xaaz\xd9\x91n\xbe\xcc\xff\x1a\xe2p\x00~\x03\xcf@\
158 \x17m\x1cdB\x10\x8d\x12\x8f\xa3ih\x1a\xf18\xd1hU\xac76\xf4\x95\x15r9L\x93X\
159 \x8c\xbe>R\xa9\xe6K\xd6.%I\x89\xa61<\xcc\xce\x9dtw\xd7F\xe0h\xf7?k\xdc\x8fk\
160 \ny,\x03;C2\x19}n\x8e\xeb\xd7\x01\xf6\xee%\x12!\x1cF\x88\xaaE\xfc\xfe\xfb\
161 \xfa\xe2"\x81\x00\xbbw\x93J\xd5V\xbe\\m\xde\xb8\xc1\xf5\xebH\xc9\x9e=\x84\
162 \xc3D\xa3[\xcf\x1c\xe9& \x08\x07xc\xf0\xc3\xbfd~\x07I{\x01\xb8\x0b\xf0\x9e\t\
163 \x18\x1cL\x9f9\xa3\x7f\xf3\r@\xa9D\x7f\xbf\x1d\x87\xaa-\xe8\xf2e\x96\x97\xcb\
164 kqr\xb2\xa1\x80z\x9bv.\xb1Y\xb3\xa8\x04A\x81\x1e\x85Q\x15\x18\x85x%\x02n)\
165 \x94\x16M\x1b\x9d\xd9,\xd9,KK\xe5\x12Z=\xbf\xe5eVW)\x14(\x95\xbc\xdc\xef\xc4\
166 \xeb\xaf\xa7\xedep\xe3\x067n\xf0\xe0\x01\x86\x01\x0e\xf7\x0f\xa9\xec\x0e\xb3\
167 \xb0\xff\x00lE\xa7A\x04\xd2Mv\xd2d\x92\x9e\x1e\x8aE\x82A\xf7\xba\xb4\x9d\x00\
168 \xfd\xfd\xa4R.\xd9\xdc\x08==H\x89\xa2\xd4\xee\xcb\x15\xf7\xdb\x85-\xa7\xdf\
169 \xeb\x04lR\xaf_\t\xce]rj\n(W\xa7\xeb\xf7\xbb\x8f>\xd2\xe7\xe6(\x95H\xa5\x98\
170 \x9a\xa2\xbf\x9fP\xc8\x9d\xb1\xd3\xa6]\xf1\xcefI&\xd9\xbb\xb7\xbc\xeek\xdcoW\
171 \xb5\x9ch\xbc\x06\xdc\x82`\xbf\x9e\xdb\xfd\x81\xbe\xber\x7f \x95"\x14*\xffdY\
172 \xe4rd2\xec\xd9\x83\x94\xc4b\x0c\x0c\x90HxE\xa0\xc6f\xa1@4\xba5* \x08\t\xfa\
173 \x83\x8c\x87\x18\x0b\x11\x0f\xd4V\xa7\xeb\xce\x81j\xde\xb2A\xb7\xc9\xa3C\xe3\
174 \xac\xad{\xd7\xd3\x9b\xda|!NH0\x10d:\xcas\x1a\xd3\x91ry\xddYCi\xb2\x0b\x89\
175 \xb3\xee\x1a<\n\x10\xfek\x13\xde\x03+\xec\xa7\xa2\xcct1\x11&Q\xd7\x1c\xc0\
176 \xcfA&\xb6\xbd\xb5\xe7\x02\'\xfb\x83]LE\x1a\xb6\x98|\xed\x0eOX\x837\xfb\x9a\
177 \x1a\x9c\xdf\xab\xc4\x13\xd3\xe0\xdf\xf76Z\xb8\x0b=\x01\rB\x1c\xed\n0\xa42\
178 \xed\x8f=\xad^\xe6\xb6U\x83\x10\xc7 \xf5Y\xee\x8d\x99.\x9e\xd3\xdc\xd9\xd7\
179 \xd7p[\xbf\x8d\x9e\xed\xbc\x8c\xe3\xbd\x08q\x12&\xe0Y\xf8\xd5/cL\xfb\xf0\xbd\
180 \x8d6_h\xc4Y\xb0\x90\xbfoo\xf4\x16^I\xa0\x05\x98\x88\xf0Y\xeeY\xd8\r\xa30\
181 \xf8\xb3\xab\xf9\xd2\xcfc\x8a\xbf"m\x93\x83\xac9\xda\x95q*EL!"H\x04\x19\x0f\
182 \xf1\xf2\x7f\xae\xc0 \xc4!\x02\x8a\xeb\x7f\x90\xb9\xf6\x00\\\xde\xc8Z\xd6\
183 \x00X`@\x11\xf9\'\xaf\xa7\xde\x1c\x06P\x05\x89 \xa3!\x92\n\xe1\x00Z\x80gf\
184 \x17*\xd4+\x0f\xd7kp\x15\xd0\xa1\xaaD\x00\xc2\xa0"\xde\x03\x0bN\xe5 \x0fYX\
185 \x83\xaa~\xf2\x85\x89\xc3\x8a(w\xadw~\x9b\x03\xc5Q&\xf1B\xa3\x16L\x87"P\x0f\
186 \xbd\x04F\r{\x07|\x91v\x06\xa1\x15\x01<\xb6\x06\xbd\x93mO9#<:`\xdbP\x9d\xee(\
187 {\x9a\xf5\xef\x1a\x08h\x9bD\xa7\xd97\xc5\xff\x00n\xb9j)\xe8*\xac\xf1\x00\x00\
188 \x00\x00IEND\xaeB`\x82'
189
190 def getTest2Bitmap():
191 return BitmapFromImage(getTest2Image())
192
193 def getTest2Image():
194 stream = cStringIO.StringIO(getTest2Data())
195 return ImageFromStream(stream)
196
197 #----------------------------------------------------------------------
198
199 if __name__ == '__main__':
200 main()