#---------------------------------------
# Module de Gestion d'une image TGA
#
# fonctions de lecture, d'ecriture et de preparation
# de l'espace memoire necessaire
#
# J-m Soler 2002
# ce script est proposé sous licence GPL.
#---------------------------------------
#---------------------------------------
# Fonction : Buffer
# ---------------------------------------
# Calcule et eserve l'espace memoire
necessaire
# ---------------------------------------
# Entree :
# height=16, hauteur
en lignes, 16 par defaut
# width=16, longueur
en pixel, 16 par defaut
# profondeur=3, nombre de
plan , rvb par defaut
# rvb=255 valeur maximale,
blanc par defaut
#
# Retour :
# b
#---------------------------------------
def Buffer(height=16, width=16, profondeur=3,rvb=255 ):
"""
Buffer : reserve l'espace memoire necessaire
"""
p=[rvb]
b=p*height*width*profondeur
return b
#---------------------------------------
# Fonction : read_tgafile
# ---------------------------------------
# Lit le fichier sur disque
# ---------------------------------------
# Entree :
#
loc2
adresse+nom du fichier
#
# Retour :
#
bitmap tampom memoire
#
width longueur
en pixel
#
height hauteur
en ligne
#
profondeur nombre de bits couleur
#---------------------------------------
def read_tgafile(loc):
f=open(loc,'rb')
#---------------------------------------
# Liire 18 octets au debut du fichier
#---------------------------------------
entete=f.read(18)
#---------------------------------------
# Afficher les valeurs en clair a lecran
#---------------------------------------
for t in entete:
print ord(t),
#---------------------------------------
# Recuperer les informations :
#---------------------------------------
width=ord(entete[13])*256+ord(entete[12])
height=ord(entete[15])*256+ord(entete[14])
profondeur=ord(entete[16])/8
l=profondeur*height*width
ee=f.read(l)
f.close()
n=0
bitmap= Buffer( height, width, 3)
for t in ee:
bitmap[n]= ord(t)
n+=1
return bitmap,width,height,profondeur
#---------------------------------------
# Fonction : write_tgafile
# ---------------------------------------
# Enregistre le fichier sur disque
# ---------------------------------------
# Entree :
#
loc2
adresse+nom du fichier
#
bitmap tampom memoire
#
width longueur
en pixel
#
height hauteur
en ligne
#
profondeur nombre de bits couleur
#
# Aucun retour
#---------------------------------------
def write_tgafile(loc2,bitmap,width,height,profondeur):
f=open(loc2,'wb')
Origine_en_haut_a_gauche=32
Origine_en_bas_a_gauche=0
Data_Type_2=2
RVB=profondeur*8
RVBA= RVB+8
entete0=[]
for t in range(18):
entete0.append(chr(0))
entete0[2]=chr(Data_Type_2)
entete0[13]=chr(width/256)
entete0[12]=chr(width % 256)
entete0[15]=chr(height/256)
entete0[14]=chr(height % 256)
entete0[16]=chr(RVB)
entete0[17]=chr(Origine_en_bas_a_gauche)
#Origine_en_haut_a_gauche
for t in entete0:
f.write(t)
for t in bitmap:
f.write(chr(t))
f.close()
#---------------------------------------
# Test
#---------------------------------------
if __name=="__main__":
loc0='d:/jmsoler/util/blenderfile/'
loc1='test.tga'
loc=loc0+loc1
loc2=loc0+'test0z.tga'
mytga,width,height,profondeur=read_tgafile(loc)
#---------------------------------------
# La position du pixel localisé en
p[y,x] avec y pour les lignes et
# x pour les colonnes, se calcule ainsi: y*width+x)*3
# le résultat doit correspondre à
la valeur bleu, +1 pour le vert
# +2 pour le rouge car ces valeurs sont ibnversées
#---------------------------------------
for y in range(0,height):
for x in range(0, width):
mytga[(y*width+x)*3+2]= 255
write_tgafile(loc2,mytga,width,height,profondeur)
#---------------------------------------
# Creer une image blanche de 400x400 en RVB
#---------------------------------------
loc3=loc0+'test1z.tga'
whiteimg=Buffer(400,400)
write_tgafile(loc3,whiteimg,400,400,3)
|