TGC Codebase Backup



GET IMAGE updated to support transparency by Scraggle

9th May 2005 17:01
Summary

Retain ALL levels of transparency



Description

The problem with the GET IMAGE command is that if your image has various levels of transparency in it, when you use GET IMAGE all transparency is lost. You could use SET IMAGE COLORKEY but that only gets rid of the completely transparent areas and not the partially transparent bits.

So I've updated the command to allow you to do this.

Syntax: GetImage(Image Number,New Image Number, Left, Top, Width, Height)



Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    `Get Image With Transparency
`======================
`©Craig McFarlane
`======================
`Written 9th May 2005


function GetImage(Image1,NewImage,Xstart,Ystart,Xsize as dword,Ysize as dword)
	
	`Find unused memblocks
	Memblock1 = 1
	repeat
		inc Memblock1
	until memblock exist(Memblock1) = 0
	NewMemblock = 2
	repeat
		inc NewMemblock
	until memblock exist(NewMemblock) = 0
	
	`Set up variables
	Width as Dword
	Height as Dword
	Depth as Dword
	Red as Byte
	Green as Byte
	Blue as Byte
	Alpha as Byte
	
	`Do it!
	make memblock from image Memblock1,Image1
	Width = memblock dword(Memblock1,0)
	Height = memblock dword(Memblock1,4)
	Depth = memblock dword(Memblock1,8)
	make memblock NewMemblock,(Width*Height)+12
	
	Write memblock Dword NewMemblock,0,Xsize
	Write memblock Dword NewMemblock,4,Ysize
	Write memblock Dword NewMemblock,8,Depth
	
	Position = (Width  * (Ystart)*4) + (Xstart*4) + 12
	NewPosition = 12
	
	for y = 1 to Ysize
		for x = 1 to Xsize 
	   
	      Blue = memblock byte(Memblock1,Position)
	      Green = memblock byte(Memblock1,Position+1)
	      Red = memblock byte(Memblock1,Position+2)
	      Alpha = memblock byte(Memblock1, Position+3)
	      
	      write memblock byte NewMemblock,NewPosition,Blue
	      write memblock byte NewMemblock,NewPosition+1,Green
	      write memblock byte NewMemblock,NewPosition+2,Red
	      write memblock byte NewMemblock,NewPosition+3,Alpha
	      
	      inc Position,4
	      Inc NewPosition,4
	      
		next x
		inc Position , (width*4) - (Xsize*4)
	next y
	
	make image from memblock NewImage,NewMemblock
	delete memblock Memblock1
	delete memblock NewMemblock
	
endfunction