Code archives/Graphics/Bitmap font routine.
This code has been declared by its author to be Public Domain code.
Download source code
| This is a working, but early, version of my bitmap font routine. Requirements are minimal. To get up and running, you need to supply a valid Blitz image which contains the characters of your font as one character per frame of animation. Font graphic should be 2 colour black and white with black being the background colour. This Will Be Done or specifying a colour when you call the function will not work as expected. Example code to generate such an image: temp=LoadImage("resources/graphics/font.png") SetBuffer ImageBuffer(temp) imgFont = CreateImage(32,32,44) MaskImage imgFont,$FF,$FF,$FF For i% = 0 To 43 GrabImage imgFont,i%*32,0,i% Next FreeImage temp Example usage: bfText(imgFont,"Hello World",$FFAA55,BF_JUSTIFY_CENTRE Or BF_JUSTIFY_MIDDLE Or BF_CHARSET_RESTRICTED_UPPERCASE) |
; Bitmap font routines. ; ; Version 0.21 FREELY DISTRIBUTABLE ; Conception 10th December 2005 14:20 GMT. ; Copyright © 2005 Stefan Holmes. ; Whilst I retain copyright, I give permission for the free distribution and use of this sourcecode. ; HISTORY ; ; Version 0.01, 10th December 2005. ; Non-working alpha. ; -- ; Version 0.10, 10th December 2005. ; Working beta. ; Text justification not implemented. ; -- ; Version 0.20, 10th December 2005. ; Working release. ; Multi-line output is missing. ; -- ; Version 0.21, 10th December 2005. ; Working release. ; Multi-line output is missing. ; Implemented colour. Requires change to how the font image is grabbed. Const BF_JUSTIFY_LEFT = %0000000000000001 ; $0001 Const BF_JUSTIFY_RIGHT = %0000000000000010 ; $0002 Const BF_JUSTIFY_CENTRE = %0000000000000011 ; $0003 Const BF_JUSTIFY_TOP = %0000000000000100 ; $0004 Const BF_JUSTIFY_BOTTOM = %0000000000001000 ; $0008 Const BF_JUSTIFY_MIDDLE = %0000000000001100 ; $000C Const BF_CHARSET_RESTRICTED_UPPERCASE = %0000000000010000 ; $0010 Const BF_CHARSET_RESTRICTED_BOTHCASES = %0000000000100000 ; $0020 Const BF_CHARSET_FULL_UPPERCASE = %0000000000110000 ; $0030 Const BF_CHARSET_FULL_BOTHCASES = %0000000001000000 ; $0040 Const BF_CHARSET_FULL_INTERNATIONAL = %0000000001010000 ; $0050 Const BF_CHARSET_RESERVED1 = %0000000001100000 ; $0060 Const BF_CHARSET_RESERVED2 = %0000000001110000 ; $0070 Function bfText(font,word$,bfColor%=$FFFFFF,flags%=0,x%=0,y%=0,w%=0,h%=0) ; ARGUMENTS: ; ; font = Valid Blitz image with anim frames containing characters. Sequence ; depends on the BF_CHARSET_... bitmask. ; ; BF_CHARSET_RESTRICTED_UPPERCASE = ; ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,!?@#-©® ; 45 characters. ; ; BF_CHARSET_RESTRICTED_BOTHCASES = ; ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,!?@#-©® ; 71 characters. ; ; BF_CHARSET_FULL_UPPERCASE = ; ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,.!?@#-'"£$%^&*()=+_:;<>/\[]{}~©® ; 69 characters. ; ; BF_CHARSET_FULL_BOTHCASES = ; ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789,.!?@#-'"£$%^&*()=+_:;<>/\[]{}~©® ; 95 characters. ; ; BF_CHARSET_FULL_INTERNATIONAL is not defined in this version. ; ; BF_CHARSET_RESERVED1 and BF_CHARSET_RESERVED2 are undefined in this version. ; ; word$ = Text to be displayed. ; ; bfColor% = $RRGGBB hex value. ; N.B. There is a gotcha here. Because of the way the images are masked, pure black text ; is not possible. Pure black is converted to darkest blue $000001. ; ; flags% = Bit flags denoting how the text is rendered. ; ; Bits 1-2 control horizontal justification. ; Bits 3-4 control vertical justification. ; Bits 5-7 denote which charset to use (CAUTION: incorrect setting can cause program to exit). ; All other bits are undefined in this version. ; ; x% and y% = Nominal pixel coordinates where text is to be displayed. ; ; w% and h% = If non-zero denotes a virtual display width and height. ; If zero, current screen width and height are used. If font = 0 DebugLog "bfText: font image not available" : End EndIf If bfColor%=0 Then bfColor%=$000001 b% = bfColor% And %00000000000000000000000011111111 g% = (bfColor% And %00000000000000001111111100000000) Shr 8 r% = (bfColor% And %00000000111111110000000000000000) Shr 16 charwidth% = ImageWidth(font) charheight% = ImageHeight(font) If w% = 0 Then w% = GraphicsWidth() If h% = 0 Then h% = GraphicsHeight() horizjustify% = (flags% And %0000000000000011) vertjustify% = (flags% And %0000000000001100) Shr 2 charset% = (flags% And %0000000001110000) Shr 4 Select horizjustify% Case 1 ; BF_JUSTIFY_LEFT offsetx% = x% Case 2 ; BF_JUSTIFY_RIGHT offsetx% = w% - (charwidth% * Len(word$)) + x% Case 3 ; BF_JUSTIFY_CENTRE offsetx% = (w% / 2) - ((charwidth% * Len(word$)) / 2) + x% End Select Select vertjustify% Case 1 offsety% = y% Case 2 offsety% = h% - charheight% + y% Case 3 offsety% = (h% / 2) - (charheight% / 2) + y% End Select Select charset% Case 0 DebugLog "bfText: No charset defined" : End Case 1 ; BF_CHARSET_RESTRICTED_UPPERCASE source$="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,!?@#-©®" word$ = Upper(word$) Case 2 ; BF_CHARSET_RESTRICTED_BOTHCASES source$="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.,!?@#-©®" Case 3 ; BF_CHARSET_FULL_UPPERCASE source$="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,.!?@#-'"+Chr$(34)+"£$%^&*()=+_:;<>/\[]{}~©®" word$ = Upper(word$) Case 4 ; BF_CHARSET_FULL_BOTHCASES source$="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789,.!?@#-'"+Chr$(34)+"£$%^&*()=+_:;<>/\[]{}~©®" Case 5 ; BF_CHARSET_FULL_INTERNATIONAL DebugLog "bfText: BF_CHARSET_FULL_INTERNATIONAL not implemented" : End Case 6 ; BF_CHARSET_RESERVED1 DebugLog "bfText: Illegal flag BF_CHARSET_RESERVED1" : End Case 7 ; BF_CHARSET_RESERVED2 DebugLog "bfText: Illegal flag BF_CHARSET_RESERVED2" : End End Select originalbuffer = GraphicsBuffer() imgTemp = CreateImage(Len(word$)*charwidth,charheight%) SetBuffer ImageBuffer(imgTemp) ClsColor r%,g%,b% : Color 0,0,0 : Cls ; This sets the colour of the text. For i% = 1 To Len(word$) char% = Instr(source$,Mid$(word$,i%,1)) If char%>0 DrawImage font,(i%-1)*charwidth%,0,char%-1 Else Rect (i%-1)*charwidth%,0,charwidth%,charheight%,True ; Draw a negative space! EndIf Next SetBuffer originalbuffer DrawImage imgTemp,offsetx%,offsety% End Function ; EOF |