Blender (jusqu'à 2.49)
Python 
Module BGL: affichage d'image
Description: définir une fonction d'affichage 
d'image TGA

Voir aussi:

Module Image:
charger une image quelconque png,jpg,bmp ou tga

    Début   Index
précédentScript Python
python:gestion de l'image tga Suivant

Ce qu'il faut obligatoirement faire: créer un buffer de la taille de l'image, par exemple pour un carré de 128 par 128 ça donnerait:
 

    ... 
    bitmap= Buffer(GL_BYTE, (128, 128, 4)) 
    ...

Ensuite ouvrir son fichier graphique:
 
    ...
    f_grx=open('monfichier.raw',"rb") 
    ...

L'avantage du fichier RAW : les pixels sont rangés tels quels sous forme de 3 octets (ce qui justifie l'option 'rb' dans l'ouverture de fichier). Donc il suffit de lire trois octets dans le fichier pour reconstituer le pixel.
 

    for y in range(0, 128): 
        for x in range(0, 128): 
            bitmap[y][x][0]=f_grx.read() 
            bitmap[y][x][1]= f_grx.read()
            bitmap[y][x][2]= f_grx.read()
    f_grx.close() 
    ...

Un fichier tga est aussi rangé de cette manière mais il y a un en -tête  avec des infos sur le type, la profondeur des couleurs, le compactage, l'orientation, etc. Il suffit de les sauter et de réaliser les mêmes opérations que pour le RAW. Le nombre d'octet à sauter se trouve indiqué dans  le premier octet  du fichier ( http://www.dcs.ed.ac.uk/home/mxr/gfx/2d/TGA.txt )

Ensuite on positionne le curseur graphique  comme pour du texte et on fait appel à la fonction glDrawPixels :
 
glRasterPos2i(100, 100) 
glDrawPixels(128, 128, GL_RGBA, GL_UNSIGNED_BYTE, bitmap) 
    ...

En fait le premier octet du fichier ne sert qu'à indiquer s'il y aura un commentaire ou pas. Toutes les autres infos se trouvent dans les 17 octets suivants, donc pour arriver aux données il faut sauter les 18 premiers octets.

Dans un fichier tga l'image est renversée,   il faut commencer le remplissage par la dernière ligne et remonter, on place un  step négatif dans la fonction range.

La fonction read doit contenir le nombre d'octet à lire et lorsque cet octet est lu il est passé en fait comme un caractère donc il faut lui redonner sa valeur d'entier.
f_grx.read()  devient  ord(f_grx.read(1))

Les couleurs sont rangées elles aussi dans l'ordre inverse
La double boucle de lecture doit ressembler à ça:
 
 
for y in range(128,0,-1):
        for x in range(0, 128):
            bitmap[y][x][2]=ord(f_grx.read(1))
            bitmap[y][x][1]= ord(f_grx.read(1))
            bitmap[y][x][0]= ord(f_grx.read(1))

on trouvera un fichier blend d'exemple, avec une image, à cette adresse:

 http://jmsoler.free.fr/util/blenderfile/draw_pic.blend
 http://jmsoler.free.fr/util/blenderfile/test.zip

L'image doit être dezippée et son répertoire d'installation indiqué dans la variable 'loc'.
 
 
 
précédentScript Python
 python:gestion de l'image tga Suivant
Vers le   Haut de page

Les questions concernant cette page  peuvent être posées sur  :
 news://news.zoo-logique.org/3D.Blender


 

 

Livre en français
Blender : apprenez, pratiquez, Créez, livre, Ed. Campus Press, coll. Starter Kit
Blender Starter Kit

Forum
FAQ
Lexique
Didacticiels
Compilations
Blender2KT
Débuter
Modelage
Blender python
Materiaux
Lumière
Animation
API python (eng)
Archives nzn
Statistiques
Doc flash Sculptris
Galerie Sculptris

mon site de démos sur youtube