RLE et Bitmap

RLE et Bitmap - Python - Programmation

Marsh Posté le 01-10-2005 à 21:44:52    

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 :p
l'image est legerement (bcp :p) 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 :
  1. elif(self.bpp==8 and self.compression==1):
  2.             #1 pixel=1 octet
  3.             #RLE compressed :s
  4.             colors=[]
  5.             for i in range(256):
  6.                 pix=f.read(4)
  7.                 colors.append((s.unpack('B', pix[2])[0], s.unpack('B', pix[1])[0], s.unpack('B', pix[0])[0]))
  8.             #print colors
  9.             f.seek(self.offset)
  10.             x=0
  11.             y=self.size[1]-1
  12.             while 1:
  13.                 mode=s.unpack('B', f.read(1))[0]
  14.                 if(mode!=0):
  15.                     ind=s.unpack('B', f.read(1))[0]
  16.                     for i in range(mode):
  17.                         #print ind
  18.                         self.Pixels[x][y]=colors[ind]
  19.                         x+=1
  20.                         if(x==self.size[0]):
  21.                             x=0
  22.                             y-=1
  23.                 else:
  24.                     sec=s.unpack('B', f.read(1))[0]
  25.                     if(sec==0) : x=0; y-=1
  26.                     elif(sec==1) : break
  27.                     elif(sec==2) :
  28.                         #la je pige plus :s
  29.                         print x, y
  30.                         x+=s.unpack('b', f.read(1))[0]
  31.                         y-=s.unpack('b', f.read(1))[0]
  32.                         print x, y
  33.                         print '--------------------'
  34.                     else:
  35.                         for i in range(sec):
  36.                             self.Pixels[x][y]==colors[s.unpack('B', f.read(1))[0]]
  37.                             x+=1
  38.                             if(x==self.size[0]):
  39.                                 x=0
  40.                                 y-=1
  41.                         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 :)

Reply

Marsh Posté le 01-10-2005 à 21:44:52   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed