note :
peut importe le format pour les images mais l'alphamap est une image en noir est blanc .
cependant seul la composante bleu donne la transparence, car l'image estant en noir et blanc les composant R V et B sont theoriquement de meme valeur)
Code : Tout sélectionner
Procedure CreateTGA(Image.s, Alphamap.s, FileName.s = "temp.tga")
Protected FileID, ImgID, AlphaID, *MemoryID
If FileSize(FileName) > -1
DeleteFile(FileName)
EndIf
FileID = CreateFile(#PB_Any, FileName)
ImgID = LoadImage(#PB_Any,Image)
AlphaID = LoadImage(#PB_Any,Alphamap)
*MemoryID = AllocateMemory(ImageWidth(ImgID)*ImageHeight(ImgID)*4)
*GetOldMemoryID = *MemoryID
;format BVRA (bleu vert rouge alpha
For x = 0 To ImageWidth(ImgID) - 1
For y = 0 To ImageHeight(ImgID) - 1
StartDrawing(ImageOutput(ImgID))
PokeB(*MemoryID , Blue(Point(x, y)))
*MemoryID + 1
PokeB(*MemoryID , Green(Point(x, y)))
*MemoryID + 1
PokeB(*MemoryID , Red(Point(x, y)))
*MemoryID + 2
StopDrawing()
Next y
Next x
*MemoryID = *GetOldMemoryID + 3
For x = 0 To ImageWidth(ImgID) - 1
For y = 0 To ImageHeight(ImgID) - 1
StartDrawing(ImageOutput(AlphaID))
PokeB(*MemoryID, Blue(Point(x, y)))
*MemoryID + 4
StopDrawing()
Next y
Next x
Debug *MemoryID
;header :
;adresse type description
;1 byte taille
;2 byte 0(1 pour colormap)
;3 byte type de compression (2 pour BVRA)
;4 short 0
;6 short 0
;8 byte 0
;9 short 0
;11 short 0
;13 short largeur
;15 short hauteur
;16 byte profondeur
;17 byte 8
WriteByte(FileID, 0)
WriteByte(FileID, 0)
WriteByte(FileID, 2)
WriteWord(FileID, 0)
WriteWord(FileID, 0)
WriteByte(FileID, 0)
WriteWord(FileID, 0)
WriteWord(FileID, 0)
WriteWord(FileID, 512)
WriteWord(FileID, 512)
WriteByte(FileID, 32)
WriteByte(FileID, 8)
WriteData(FileID, *GetOldMemoryID, ImageWidth(ImgID)*ImageHeight(ImgID)*4) ;Data image
FreeImage(AlphaID):FreeImage(ImgID):FreeMemory(*GetOldMemoryID):CloseFile(FileID) ;on decharge la memoire
EndProcedure