Code archives/File Utilities/TexTile

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

Download source code

TexTile by BlitzSupport2001
Lets you view and create tiled textures. READ THE IMPORTANT information in the source before doing anything!






; READ IMPORTANT INFORMATION FIRST!!!!!!







; ---------------------------------------------------------------
; Textile -- james@hi-toro.com -- Public Domain
; ---------------------------------------------------------------
; Crude little util for creating/editing B3D tileable textures.
; ---------------------------------------------------------------

; Load a texture to see it tiled, or load a large image and create
; a new texture, eg. from the bricks of a building...

; ***************************************************************

; IMPORTANT!!! Seems to be a BB bug that saves the image into
; the boot drive root folder (eg. "C:\"), instead of the
; current directory... so look there after quitting the program!

; IMPORTANT 2!!! Don't try to run it from here! CREATE AS AN
; EXECUTABLE. Drag the image you want to load onto the
; program's icon to load it.

; ***************************************************************

; ---------------------------------------------------------------
; Controls
; ---------------------------------------------------------------

; Use mouse to position box
; Use cursors to scroll around picture
; Use Ctrl + cursors to resize box
; Use < and > (actually , and .) to rotate (slowly!)
; Use < and > with Shift for larger rotation
; ESC quits and saves the texture

AppTitle "Textile"

; Set display mode (windowed) and double-buffering:
Graphics 640, 480, 0, 2
SetBuffer BackBuffer ()

; Source image position and limits to keep on screen:
Global sourceImage, sourceCopy, sx, sy, maxsx, maxsy
Global bw, resizing, rotation#

; Load source image:
a$ = CommandLine$ ()
LoadSource (a$)

; Resulting texture info:
Global textureImage = CopyImage (sourceImage);CreateImage (TextureWidth, TextureHeight)
Global texWidth = 64;ImageWidth (textureImage)
Global texHeight = 64;ImageHeight (textureImage)

TFormFilter False

Repeat

	RotateSource ()
	PositionSource ()	
	CopyToTexture ()
	ResizeTexture ()	
	PrintInfo ()
	
	Flip

Until KeyHit (1)

SaveTexture ()
End

; ---------------------------------------------------------------

Function LoadSource (a$)
	; Weird, Win2000 adds quotes round the command line that Blitz chokes on, whereas 98 doesn't!
	If Left (a$, 1) = Chr (34) And Right (a$, 1) = Chr (34)
		a$ = Mid (a$, 2, Len (a$) - 2)
	EndIf
	sourceImage = LoadImage (a$)
	If sourceImage = 0 Then RuntimeError "[Guru Meditation]" + Chr (10) + Chr (10) + "Cannot load image. Throwing dollies out of pram...": End
	sourceCopy = CopyImage (sourceImage)
	If ImageWidth (sourceImage) > GraphicsWidth ()
		maxsx = - (ImageWidth (sourceImage) - GraphicsWidth ())
	Else
		maxsx = 0
	EndIf
	If ImageHeight (sourceImage) > GraphicsHeight () / 2
		maxsy = - (ImageHeight (sourceImage) - (GraphicsHeight () / 2) + 1)
	Else
		maxsy = 0
	EndIf
	sx = 0
	sy = 0
End Function

Function PositionSource ()

	Viewport 0, 0, GraphicsWidth (), (GraphicsHeight () / 2) - 1
	Cls

	If Not resizing

		If (KeyDown (42)) Or (KeyDown (54))
			jump = 32
		Else
			jump = 1
		EndIf
	
		If maxsx <> 0
			If KeyDown (203)
				sx = sx + jump
			EndIf
			If KeyDown (205)
				sx = sx - jump
			EndIf
		EndIf
	
		If maxsy <> 0
			If KeyDown (208)
				sy = sy - jump
			EndIf
			If KeyDown (200)
				sy = sy + jump
			EndIf
		EndIf
		
		If sx > 0 Then sx = 0
		If sy > 0 Then sy = 0
	
		If sx < maxsx Then sx = maxsx
		If sy < maxsy Then sy = maxsy

	EndIf
	
	DrawImage sourceImage, sx, sy

End Function

Function DrawBox ()
	If bw Then c = 255 Else c = 0
	Color c, c, c
	Rect MouseX (), MouseY (), texWidth, texHeight, 0
End Function

Function CopyToTexture ()
	If MouseHit (1)
		FreeImage textureImage
		textureImage = CreateImage (texWidth, texHeight)
		GrabImage textureImage, MouseX (), MouseY ()
	EndIf
	DrawBox ()
	bw = 1 - bw
	Viewport 0, (GraphicsHeight () / 2) + 1, GraphicsWidth (), (GraphicsHeight () / 2) - 1
	Cls
	TileImage textureImage, 0, (GraphicsHeight () / 2) + 1
End Function

Function ResizeTexture ()

	resizing = False
	
	If (KeyDown (29)) Or (KeyDown (157))

		resizing = True
		changed = 0

		If (KeyDown (42)) Or (KeyDown (54))
			jump = 16
		Else
			jump = 1
		EndIf

		If KeyDown (203)
			texWidth = texWidth - jump
			changed = True
		EndIf

		If KeyDown (205)
			texWidth = texWidth + jump
			changed = True
		EndIf
	
		If KeyDown (200)
			texHeight = texHeight - jump
			changed = True
		EndIf

		If KeyDown (208)
			texHeight = texHeight + jump
			changed = True
		EndIf

		If texWidth < 2 Then texWidth = 2
		If texHeight < 2 Then texHeight = 2

;		If changed
;			FreeImage textureImage
;			textureImage = CreateImage (texWidth, texHeight)
;		EndIf

	EndIf

End Function

Function PrintInfo ()
	Color 0, 0, 0
	Text 20, (GraphicsHeight () / 2) + 20, "Texture width: " + texWidth
	Text 20, (GraphicsHeight () / 2) + 40, "Texture height: " + texHeight
	Color 255, 255, 255
	Text 21, (GraphicsHeight () / 2) + 21, "Texture width: " + texWidth
	Text 20, (GraphicsHeight () / 2) + 41, "Texture height: " + texHeight
End Function

Function SaveTexture ()
	texture$ = "Texture.bmp"	
	counter = 1
	Repeat
		counter = counter + 1
		texture$ = "Texture" + counter + ".bmp"
	Until FileType (texture$) = 0
	SaveImage textureImage, CurrentDir$ () + "\" + texture$
End Function

Function RotateSource ()

	changed = False
	
	If (KeyDown (42)) Or (KeyDown (54))
		jump# = 0.5
	Else
		jump# = 0.05
	EndIf

	If KeyDown (51)
		FreeImage sourceImage
		sourceImage = CopyImage (sourceCopy)
		MidHandle sourceImage
		rotation = rotation - jump
		changed = True
	EndIf

	If KeyDown (52)
		FreeImage sourceImage
		sourceImage = CopyImage (sourceCopy)
		MidHandle sourceImage
		rotation = rotation + jump
		changed = True
	EndIf

	If changed
		RotateImage sourceImage, rotation
		HandleImage sourceImage, 0, 0
		If ImageWidth (sourceImage) > GraphicsWidth ()
			maxsx = - (ImageWidth (sourceImage) - GraphicsWidth ())
		Else
			maxsx = 0
		EndIf
		If ImageHeight (sourceImage) > GraphicsHeight () / 2
			maxsy = - (ImageHeight (sourceImage) - (GraphicsHeight () / 2) + 1)
		Else
			maxsy = 0
		EndIf
	EndIf

End Function

Comments

None.

Code Archives Forum