@@ -98,6 +98,7 @@ def _set_argtypes(self):
9898 self .core .CFDataGetBytePtr .argtypes = [ctypes .c_void_p ]
9999 self .core .CFDataGetLength .argtypes = [ctypes .c_void_p ]
100100 self .core .CGDataProviderRelease .argtypes = [ctypes .c_void_p ]
101+ self .core .CFRelease .argtypes = [ctypes .c_void_p ]
101102
102103 def _set_restypes (self ):
103104 # type: () -> None
@@ -114,6 +115,7 @@ def _set_restypes(self):
114115 self .core .CFDataGetBytePtr .restype = ctypes .c_void_p
115116 self .core .CFDataGetLength .restype = ctypes .c_uint64
116117 self .core .CGDataProviderRelease .restype = ctypes .c_void_p
118+ self .core .CFRelease .restype = ctypes .c_void_p
117119
118120 @property
119121 def monitors (self ):
@@ -183,12 +185,13 @@ def grab(self, monitor):
183185 'CoreGraphics.CGWindowListCreateImage() failed.' , locals ())
184186
185187 prov = self .core .CGImageGetDataProvider (image_ref )
186- data = self .core .CGDataProviderCopyData (prov )
187- data_ref = self .core .CFDataGetBytePtr (data )
188- buf_len = self .core .CFDataGetLength (data )
189- data = ctypes .cast (data_ref , ctypes .POINTER (ctypes .c_ubyte * buf_len ))
190- data = data .contents
188+ copy_data = self .core .CGDataProviderCopyData (prov )
189+ data_ref = self .core .CFDataGetBytePtr (copy_data )
190+ buf_len = self .core .CFDataGetLength (copy_data )
191+ raw = ctypes .cast (data_ref , ctypes .POINTER (ctypes .c_ubyte * buf_len ))
192+ data = bytearray ( raw .contents )
191193 self .core .CGDataProviderRelease (prov )
194+ self .core .CFRelease (copy_data )
192195
193196 if rounded_width != monitor ['width' ]:
194197 data = self .resize (data , monitor )
0 commit comments