Code archives/File Utilities/Save TGA 32

This code has been declared by its author to be Public Domain code.

Download source code

Save TGA 32 by Hulk
(Posted 22 years ago)
Original code from Skidracer

Save buffer to TGA 32, with or without alpha
Alpha was calculated by RGB sum, very nice..., very fast!
; ID: 1
; Author: skidracer
; Date: 2001-08-16 16:24:30
; Title: SaveTGA
; Description: save texture in TGA format
;
; Addition coding HULK on 12/2004
; Description: save buffer to TGA format
; flag: pix_depth=24 no alpha save
;       pix_depth=32 save alpha from rgb sum ;nice!


Graphics3D 640,480,32,2
SetBuffer FrontBuffer()

;**************************************************************
; MISC STUFF
camera%=CreateCamera()

PositionEntity camera,0,0,-10

Dim p(100)
For a=1 To 100
	p(a)=CreateSprite()
	EntityAlpha p(a),Rnd(.1,.5)
	EntityColor p(a),Rnd(255),Rnd(255),Rnd(255)
	PositionEntity p(a),Rnd(-10,10),Rnd(-10,10),Rnd(0,10)
Next

RenderWorld()
Color 255,0,0
Rect 0,0,640,480,0
WaitKey()
;**************************************************************

Save_buffer_tga("c:\test.tga",FrontBuffer(),640,480,32)
End





Function Save_buffer_TGA(name$,buffer%,sx%,sy%,pix_depth%=24)
    Local f,width%,height%,x%,y%
    width=sx
    height=sy
    f=WriteFile(name$)
    WriteByte(f,0) ;idlength
    WriteByte(f,0) ;colormaptype
    WriteByte(f,2) ;imagetype 2=rgb
    WriteShort(f,0) ;colormapindex
    WriteShort(f,0) ;colormapnumentries
    WriteByte(f,0) ;colormapsize 
    WriteShort(f,0) ;xorigin
    WriteShort(f,0) ;yorigin
    WriteShort(f,width) ;width
    WriteShort(f,height) ;height
    WriteByte(f,32) ;pixsize
    WriteByte(f,8) ;attributes

    LockBuffer buffer
	For y=height-1 To 0 Step -1
        For x=0 To width-1

			If pix_depth=24
				pix%=ReadPixelFast(x,y,buffer)
				WriteInt f,pix
			Else
				pix%=(ReadPixelFast(x,y,buffer) Shl 8) Shr 8

				ir%=((pix Shr 16) And $00ff)
				ig%=((pix Shr 8) And $00ff)	
				ib%=((pix And $00ff))
				
				alpha#=(ir + ig +ib) * 1.5		;1.5 alpha power based on rgb sum :) 1.5, 1.7, 1.9 increase visibility but decrease alpha
				
				If alpha>255 Then alpha=255
				
				WriteInt f,( alpha Shl 24 ) Or pix
			EndIf      
			
        Next
    Next
    CloseFile f
	UnlockBuffer buffer
End Function