Ecrivez une fonction appelée listenToPicture qui prend une image comme argument. Il montre d'abord l'image. Ensuite, il parcourt tous les 4 pixels sur chaque 4ème ligne et effectue les opérations suivantes. Il calcule le total des niveaux rouge, vert et bleu du pixel, divise cela par 9, puis ajoute le résultat à 24. Ce nombre sera le numéro de note joué par playNote. Cela signifie que plus le pixel est sombre, plus la note est basse; plus le pixel est clair, plus la note est élevée. Il jouera cette note à plein volume (127) pendant un dixième de seconde (100 millisecondes). Chaque fois qu'il passe à une nouvelle ligne, il imprime le numéro de ligne (valeur y) sur la console. Votre fonction principale demandera à l'utilisateur de sélectionner un fichier avec une image. Il imprimera le nombre de notes à lire (qui est le nombre de pixels dans l'image divisé par 16, pourquoi?). Il appellera alors la fonction listenToPicture.Comment faire une boucle sur tous les 4 pixels dans toutes les 4 lignes, en utilisant Python?
Voici ce que j'ai jusqu'à présent, et je ne suis pas sûr comment mettre en place en boucle tous les 4 pixels dans chaque 4ème rangée. Toute aide sera grandement appréciée.
def main():
pic= makePicture(pickAFile())
printNow (getPixels(pic)/16)
listenToPicture(pic)
def listenToPicture(pic):
show(pic)
w=getWidth(pic)
h=getHeight(pic)
for px in getPixels(pic):
r= getRed(px)
g= getGreen(px)
b= getBlue(px)
tot= (r+g+b)/9
playNote= tot + 24
Le nombre de notes à jouer n'est pas nécessairement # pixels/16. Uniquement si la largeur et la hauteur sont des multiples de 4 –
Utilisez-vous Python Imaging Library (PIL)? –
quelle lib vous utilisez pour charger l'image? comment sont disposées les données de pixels, obtenez-vous un str ou un tableau, est-ce rgbrgbrgb ... ou rrrr ..., ggg ..., bbb ...? –