« Pygame/Introduction au module Surfarray » : différence entre les versions

Contenu supprimé Contenu ajouté
Annulation des modifications 152522 de 193.49.146.121 (discuter)
Aucun résumé des modifications
Ligne 98 :
>>> '''c[8:1:-1]''' ''#slice 1 to 8, reversed''
array([8, 7, 6, 5, 4, 3, 2])
 
>>> c = arange(10) #like range, but makes an array
>>> c #show the array
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> c[1:6:2] #slice odd values from 1 to 6
array([1, 3, 5])
>>> c[4::4] #slice every 4th val starting at 4
array([4, 8])
>>> c[8:1:-1] #slice 1 to 8, reversed
array([8, 7, 6, 5, 4, 3, 2])
 
Voilà. Vous avez assez d'informations pour vous permettre de commencer à utiliser le module surfarray avec le module Numeric. Les propriétés du module Numeric sont certainement plus consistantes, mais il s'ait d'une introduction. Par ailleurs, on veut seulement faire les trucs marrants, pas vrai ?
Ligne 181 ⟶ 171 :
Avec ces informations, nous sommes parés pour commencer à essayer quelque chose avec les tableaux de surface. Les petites démonstrations suivantes qui créent un tableau numpy et l'affichent dans pygame. Ces différents tests sont issus des exemples contenus dans le fichier arraydemo.py. Il y a une simple fonction nommée surfdemo_show qui affiche un tableau à l'écran.
 
#==exemple 1 : création d'une image noire==
[[Image:http://www.pygame.org/docs/tut/surfarray/allblack.jpg]]
allblack = N.zeros((128, 128))
Ligne 187 ⟶ 177 :
Dans notre premier exemple, nous créons un tableau tout noir de 128 lignes sur 128 colonnes. Pour créer un tableau numérique avec un taille déterminée, il est préférable d'utiliser la fonction zeros. Ici, le tableau de zéro forme une surface noire.
 
#==exemple 2 : tableaux de 3 dimensions, séparation des composantes RVB==
[[Image:http://www.pygame.org/docs/tut/surfarray/striped.jpg]]
striped = N.zeros((128, 128, 3))
Ligne 195 ⟶ 185 :
Ici nous manipulons un tableau à 3 dimensions. On commence par créer une image rouge. Alors on extrait un ligne sur trois et on lui donne la couleur bleu/vert. Comme vous pouvez le constater, nous pouvons traiter les tableaux à trois dimensions presque comme un tableau à deux dimensions, seulement on lui assigne des 3-uplets au lieu de valeurs uniques (scalaires).
 
==exemple 3 : extraction des données d'une image depuis un fichier==
==exemple 3==
[[Image:http://www.pygame.org/docs/tut/surfarray/imgarray.jpg]]
imgsurface = pygame.image.load('surfarray.jpg')
Ligne 202 ⟶ 192 :
Ici nous chargeons une image avec le module image, qui la convertit en un tableau 2D d'entiers. Nous utiliserons cette image comme base dans le reste de nos exemple.
 
==exemple 4 : retournement ''miroir'' vertical==
[[Image:http://www.pygame.org/docs/tut/surfarray/flipped.jpg]]
flipped = imgarray[:,::-1]
Ligne 208 ⟶ 198 :
Voici un retournement vertical de l'image, réalisé en utilisant la notation en ''slices'' à l'aide d'un incrément négatif pour l'indice des colonnes.
 
==exemple 5 : miniaturisation d'une image==
[[Image:http://www.pygame.org/docs/tut/surfarray/scaledown.jpg]]
scaledown = imgarray[::2,::2]
Ligne 214 ⟶ 204 :
Diminuer une image repose sur le même principe que l'exemple précédent. Ici, la notation en ''slices'' est utilisée pour conserver seulement un pixel sur deux à la fois verticalement et horizontalement.
 
==exemple 6 : augmentation de la taille d'une image==
[[Image:http://www.pygame.org/docs/tut/surfarray/scaleup.jpg]]
size = N.array(imgarray.shape)*2
Ligne 224 ⟶ 214 :
Augmenter la taille d'une image n'est pas aussi radicalement simple, mais s'inspire de la diminution que nous avons réalisé en utilisant la notation en tranches. D'abord, nous créons un tableau qui est de deux fois la taille de l'original. On réalise une copie du tableau original, pixel par pixel, en écrivant seulement sur les colonnes et les lignes de rang pair du tableau de destination, puis on réalise à nouveau l'opération en écrivant seulement sur les colonnes et les lignes de rang impair du tableau de destination. On obtient ainsi une image dont la taille a doublé.
 
==exemple 7 : création d'une image rouge==
[[Image:http://www.pygame.org/docs/tut/surfarray/redimg.jpg]]
rgbarray = surfarray.array3d(imgsurface)
Ligne 231 ⟶ 221 :
surfdemo_show(redimg, 'redimg')
 
Ici, on utilise le codage RGB pour modifier les couleurs. On fait un simple tableau 3D à partir de l'image originale, eten utilisant la méthode ''surfarray.array3D()'', placerpuis toutes les valeurs pour le bleu et le vert (''Green'' et ''Blue'') sont mises à zéro. Le codage de l'information est réalisé seulement avec la composante rouge de l'image.
 
==exemple 8 : filtrage par convolution==
 
[[Image:http://www.pygame.org/docs/tut/surfarray/soften.jpg]]
Ligne 246 ⟶ 236 :
On réalise ici une convolution à l'aide d'un filtre 3x3 qui va adoucir les reliefs de l'image. Cela paraît lourd en calculs, mais ce qui est fait est en fait de décaler l'image de 1 pixel dans toutes les directions, et de sommer toutes ces images (en multipliant par un certain coefficient de poids). Alors, on moyenne toutes les valeurs obtenues. Ce n'est pas un filtre gaussien, mais c'est rapide.
 
==exemple 9 : décoloration==
[[Image:http://www.pygame.org/docs/tut/surfarray/xfade.jpg]]
src = N.array(rgbarray)
Ligne 257 ⟶ 247 :
Enfin, Nous réalisons une décoloration croisée entre l'image originale et une fond entièrement en bleu. Ce n'est pas très folichon, mais l'image de destination peut être n'importe quoi, et en modifiant le coefficient multiplicateur (0.50 dans l'exemple), vous pouvez choisir l'intensité de la décoloration pour votre image.
 
==endingconclusion==
J'espère qu'à ce stade, vous avez des idées d'utilisation pour le module surfarray, dans la réalisation d'effets spéciaux et de transformations d'image, seulement réalisables au niveau du pixel. Au minimum, vous pouvez utiliser surfarray pour faire quelques opérations rapides avec'''Surface.set_at()''' et '''Surface.get_at()'''. Mais ne pensez pas que vous en avez terminé, il vous reste encore beaucoup à apprendre.