+ contrib/hbcomm/DEPRECATED.txt
* contrib/hbgd/tests/counter.prg
* contrib/hbgd/tests/imgs_in/57chevy.gif -> contrib/hbgd/tests/imgs_in/d57chevy.gif
* contrib/hbgd/tests/imgs_in/7seg.gif -> contrib/hbgd/tests/imgs_in/d7seg.gif
* contrib/hbgd/tests/imgs_in/brsd.gif -> contrib/hbgd/tests/imgs_in/dbrsd.gif
* contrib/hbgd/tests/imgs_in/fdb.gif -> contrib/hbgd/tests/imgs_in/dfdb.gif
* contrib/hbgd/tests/imgs_in/jelly.gif -> contrib/hbgd/tests/imgs_in/djelly.gif
* contrib/hbgd/tests/imgs_in/odb.gif -> contrib/hbgd/tests/imgs_in/dodb.gif
* contrib/hbgd/tests/imgs_in/odw.gif -> contrib/hbgd/tests/imgs_in/dodw.gif
* contrib/hbgd/tests/imgs_in/pdg.gif -> contrib/hbgd/tests/imgs_in/dpdg.gif
* contrib/hbgd/tests/imgs_in/pdw.gif -> contrib/hbgd/tests/imgs_in/dpdw.gif
* some more sync with 3.4 fork
128 lines
3.4 KiB
Plaintext
128 lines
3.4 KiB
Plaintext
/* Copyright 2004-2005 Francesco Saverio Giudice <info@fsgiudice.com>
|
|
*
|
|
* Counter sample
|
|
* usage:
|
|
* counter <number to show>
|
|
* i.e.: counter 34524
|
|
*/
|
|
|
|
#require "hbgd"
|
|
|
|
/* Some digit images from:
|
|
https://web.archive.org/web/www.digitmania.holowww.com/all.html */
|
|
|
|
#define IMAGES_IN "imgs_in" + hb_ps()
|
|
#define IMAGES_OUT "imgs_out" + hb_ps()
|
|
|
|
#define DISPLAY_NUM 10
|
|
|
|
PROCEDURE Main( cValue, cBaseImage )
|
|
|
|
LOCAL oI, oIDigits, nWidth, nHeight, nDigits, nNumWidth, oTemp
|
|
|
|
#if 0
|
|
LOCAL black, blue, red, green, cyan, gray
|
|
#endif
|
|
LOCAL aNumberImages := {}
|
|
LOCAL n, nValue
|
|
|
|
// A value if not passed
|
|
hb_default( @cValue, Str( hb_RandomInt( 1, 10 ^ DISPLAY_NUM ), DISPLAY_NUM ) )
|
|
hb_default( @cBaseImage, "d57chevy.gif" )
|
|
|
|
IF ! hb_FileExists( IMAGES_IN + cBaseImage )
|
|
? "ERROR: Base Image File '" + IMAGES_IN + cBaseImage + "' not found"
|
|
QUIT
|
|
ENDIF
|
|
|
|
nValue := Val( cValue )
|
|
|
|
// Fix num lenght
|
|
IF nValue > 10 ^ DISPLAY_NUM
|
|
nValue := 10 ^ DISPLAY_NUM
|
|
ENDIF
|
|
|
|
cValue := StrZero( nValue, DISPLAY_NUM )
|
|
|
|
? "Value = ", cValue
|
|
|
|
// Check output directory
|
|
#if 0
|
|
IF ! hb_DirExists( IMAGES_OUT )
|
|
DirMake( IMAGES_OUT )
|
|
ENDIF
|
|
#endif
|
|
|
|
/* Load a digits image in memory from file */
|
|
oIDigits := GDImage():LoadFromGif( IMAGES_IN + cBaseImage )
|
|
|
|
/* Get single number images */
|
|
|
|
// Get dimensions
|
|
nWidth := oIDigits:Width()
|
|
nHeight := oIDigits:Height()
|
|
|
|
// Check base digits image
|
|
DO CASE
|
|
CASE nWidth % 10 == 0 // 0..9 digits
|
|
nDigits := 10
|
|
CASE nWidth % 11 == 0 // 0..9 :
|
|
nDigits := 11
|
|
CASE nWidth % 13 == 0 // 0..9 : am pm
|
|
nDigits := 13
|
|
OTHERWISE
|
|
? "Error on digits image"
|
|
ENDCASE
|
|
nNumWidth := nWidth / nDigits
|
|
|
|
? "nNumWidth, nWidth, nHeight, nDigits = ", nNumWidth, nWidth, nHeight, nDigits
|
|
|
|
/* extracts single digits */
|
|
FOR n := 1 TO nDigits
|
|
oTemp := oIDigits:Copy( ( n - 1 ) * nNumWidth, 0, nNumWidth, nHeight )
|
|
oTemp:SaveGif( IMAGES_OUT + StrZero( n - 1, 2 ) + ".gif" )
|
|
// Here I have to clone the image, otherwise on var destruction I loose
|
|
// the image in memory
|
|
AAdd( aNumberImages, oTemp:Clone() )
|
|
NEXT
|
|
|
|
/* Create counter image in memory */
|
|
oI := GDImage():New( nNumWidth * DISPLAY_NUM, nHeight ) // the counter
|
|
? "Image dimensions: ", oI:Width(), oI:Height()
|
|
|
|
/* Allocate drawing color */
|
|
#if 0
|
|
black := oI:SetColor( 0, 0, 0 )
|
|
blue := oI:SetColor( 0, 0, 255 )
|
|
red := oI:SetColor( 255, 0, 0 )
|
|
green := oI:SetColor( 0, 255, 0 )
|
|
cyan := oI:SetColor( 0, 255, 255 )
|
|
|
|
/* Draw rectangle */
|
|
oI:Rectangle( 0, 0, 200, 30, , blue )
|
|
#endif
|
|
|
|
/* Draw Digits */
|
|
FOR n := 1 TO Len( cValue )
|
|
// Retrieve the number from array in memory
|
|
oTemp := aNumberImages[ Val( SubStr( cValue, n, 1 ) ) + 1 ]:Clone()
|
|
// Save it to show the number for a position
|
|
oTemp:SaveGif( IMAGES_OUT + "Pos_" + StrZero( n, 2 ) + ".gif" )
|
|
// Set the digit as tile that I have to use to fill position in counter
|
|
oI:SetTile( oTemp )
|
|
// Fill the position with the image digit
|
|
oI:Rectangle( ( n - 1 ) * nNumWidth, 0, ( n - 1 ) * nNumWidth + nNumWidth, nHeight, .T., gdTiled )
|
|
NEXT
|
|
|
|
/* Write Final Counter Image */
|
|
oI:SaveGif( IMAGES_OUT + "counter.gif" )
|
|
|
|
/* Destroy images in memory */
|
|
// Class does it automatically
|
|
|
|
?
|
|
? "Look at " + IMAGES_OUT + " folder for output images"
|
|
?
|
|
|
|
RETURN
|