Bonjour à tous

Je suis nouveau ici, et je suis un élève de Terminale S spé ISN.
Je suis en train de programmer, en langage Python, de façon à rendre une image négative, c'est-à-dire que les couleurs de chaque octets soient négatif (blanc => noir, etc...)
L'image doit ressembler à ce genre de couleurs : http://totographe.free.fr/public/tut...f/negatif3.jpg

Je possède 2 fichiers, 04 (image bmp de base), et 04_negatif (image bmp à rendre négatif).
En codage, je dispose uniquement des fonctions:
-Open, Close, Seek, Read, Write (pour le traitement d'un fichier)
-Les fonctions Unpack pour convertir un binaire en décimal, et inversement avec Pack.
-Les bases comme la boucle For / While

Le but du jeu est de remplacer chaque couleur en complémentaire, le calcul est : "Octet_Complémentaire" = | "Octet" - 255 |

Mon programme actuel, pour ce but, est :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
from struct import *
 
fic_src = open("04.bmp","rb")
fic_dst = open("04_negatif.bmp","wb")
for i in range(55, 1488057): #Pour i allant du 55ème octet (début codage image) au 1488056ème octet (fin codage image).
    fic_src.seek(i) #Je cherche le ième octet du fichier 04.bmp.
    octet_lu = fic_src.read(i) #J'affecte cette représentation binaire à "octet_lu" pour plus de facilité.
    a = unpack('B',octet_lu) #J'affecte à "a" la valeur décimale de "octet_lu"
    nouvelle_valeur_decimal = a [0]-255 #Calcul pour obtenir la valeur décimale complémentaire : comp = |coul-255|
    if nouvelle_valeur_decimal < 0 :
        nouvelle_valeur_decimal = - nouvelle_valeur_decimal #Règle de la valeur absolue
    nouvelle_valeur = pack('B',nouvelle_valeur_decimal)#Nouvelle valeur binaire
    fic_dst.write(nouvelle_valeur)#Je l'écris dans le nouveau fichier, afin de le rendre négatif. (avec la boucle, on aura modifier chaque octet du traitement de l'image)
fic_src.close
fic_dst.close #Je ferme les deux fichiers.
Mais je rencontre un problème dont j'ignore : "unpack requires a bytes object of length 1" et la ligne d'erreur est : "a = unpack('B',octet_lu)

Cela fait depuis longtemps que j'essaye de trouver un programme cohérent...
C'est pour cela que je fais appel à votre aide

Je vous remercie pour votre lecture !