créer un tga en fusionant une texture avec une alphamap

Partagez votre expérience de PureBasic avec les autres utilisateurs.
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

créer un tga en fusionant une texture avec une alphamap

Message par cha0s »

tout est dans le titre voicie une petit fonction detaillé qui permet de créer une image au format TGA 32 non compressé avec une texture et une alphamap

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