Hello all, I think this was somewhere discussed, but I cannot find and this does not work for me. So I want to use this function to copy numpy array values to a surface. I think I do everything right, but it does not work. pygame version: 1.9.2a0, Windows 7, python 2.7.12
So I use this function, which also checks the shape of input and surface: def copy_arr(Dest, Src): surf_w = Dest.get_width() surf_h = Dest.get_height() surf_bs = Dest.get_bitsize() arr_h = Src.shape[0] arr_w = Src.shape[1] arr_bs = Src.dtype print "surface shape: {} x {}".format(surf_w, surf_h) print "surface format: {} ".format(surf_bs) #get_bytesize print "array shape: {} x {}".format(arr_w, arr_h) print "array type: {} ".format(arr_bs) pygame.pixelcopy.array_to_surface(Dest, Src) It gives me: surface shape: 300 x 200 surface format: 8 array shape: 300 x 200 array type: uint8 Traceback (most recent call last): File "fmap.py", line 69, in <module> copy_arr(I_surf, I) File "fmap.py", line 30, in copy_arr pygame.pixelcopy.array_to_surface(Dest, Src) ValueError: array must match surface dimensions I create them like: W = 300 H = 200 I = numpy.zeros((H, W),dtype = "uint8") I_surf = pygame.Surface((W, H), 0, 8) So, seems the problem is not in me. Same error is for surfarray.blit_array (), but I think it depends on pixelcopy. Aslo this function works fine, which I use now: def copy_arr(Dest, Src): buf = Dest.get_buffer() buf.write(Src.tostring(), 0) I just thought there must be more effective way to do it. Hope somebody will clear that out. Mikhail