Files
harbour-core/contrib/hbgd/tests/counter.prg
Viktor Szakats 59bd39a33c 2017-09-13 14:39 UTC Viktor Szakats (vszakats users.noreply.github.com)
+ 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
2017-09-13 14:39:27 +00:00

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