Bl0tCh | Bonjour,
Toujour ds le cadre du loader de bitmap. Je suis passer au RLE 8 bits et j'ai des problemes. C'est au niveau du decodage RLE, Je n'arrive pas à retomber sur limage originale
l'image est legerement (bcp ) modifiée. A mon avis ça vient au moment du decalge de x pixels a droite et y pixels vers le haut. Cad quand lensemble des deux octets du RLE sont 00 02 X Y. Parce que j'ai limpression de faire ce qu'il faut ds les autres cas :s.
Voici le code :
Code :
- elif(self.bpp==8 and self.compression==1):
- #1 pixel=1 octet
- #RLE compressed :s
- colors=[]
- for i in range(256):
- pix=f.read(4)
- colors.append((s.unpack('B', pix[2])[0], s.unpack('B', pix[1])[0], s.unpack('B', pix[0])[0]))
- #print colors
- f.seek(self.offset)
- x=0
- y=self.size[1]-1
- while 1:
- mode=s.unpack('B', f.read(1))[0]
- if(mode!=0):
- ind=s.unpack('B', f.read(1))[0]
- for i in range(mode):
- #print ind
- self.Pixels[x][y]=colors[ind]
- x+=1
- if(x==self.size[0]):
- x=0
- y-=1
- else:
- sec=s.unpack('B', f.read(1))[0]
- if(sec==0) : x=0; y-=1
- elif(sec==1) : break
- elif(sec==2) :
- #la je pige plus :s
- print x, y
- x+=s.unpack('b', f.read(1))[0]
- y-=s.unpack('b', f.read(1))[0]
- print x, y
- print '--------------------'
- else:
- for i in range(sec):
- self.Pixels[x][y]==colors[s.unpack('B', f.read(1))[0]]
- x+=1
- if(x==self.size[0]):
- x=0
- y-=1
- if(sec%2!=0) : f.read(1)
|
un truc etonnant c'est que au niveau du if(sec==2) x et y prennent des valeurs negatives :s. Python ne genere pas d'exception car il ya possibilité d'utiliser des indices negatifs mais je ne suis pas sur que ces indices doivent etre negatifs :s
Merci  |