Initial commit

This commit is contained in:
2025-07-17 20:36:20 +02:00
commit 069402c4ec
37 changed files with 7849 additions and 0 deletions

166
ThyBitmapFontCreator.pb Normal file
View File

@@ -0,0 +1,166 @@
Structure myFontData
x.l
y.l
Width.l
Height.l
EndStructure
Structure BitmapFont
SpriteId.i
AsciiStart.c
AsciiEnd.c
Array FontData.myFontData(1)
EndStructure
Global NewList BitmapFont.BitmapFont()
Global Dim FinalFont.myFontData(1)
Enumeration
#Win_Main
#Gdt_Canvas
#Gdt_Marg
#Gdt_Save
EndEnumeration
Procedure MyLoadFont(Font.l,Name.s,Size.l,Flag=0)
Taille=1;
Img=CreateImage(#PB_Any,1,1);Creation d'une image pour travailler
Repeat
If IsFont(Font)
FreeFont(Font)
EndIf
Taille+1
LoadFont(Font, Name, Taille,Flag)
StartDrawing(ImageOutput(Img))
DrawingFont(FontID(Font))
If TextHeight("@")>Size Or TextWidth("@")>Size
Taille-1
Quit=1
EndIf
StopDrawing()
Until Quit=1 Or Taille>500
Debug "Taille="+Str(Taille)
FreeImage(Img)
EndProcedure
Procedure SelectFont(*BitmapFont.BitmapFont)
Police$ = "Arial" ; Police initiale (peut aussi être nulle)
TaillePolice = 96 ; Taille initiale (peut aussi être nulle)
Resultat = FontRequester(Police$, TaillePolice, #PB_FontRequester_Effects)
If Resultat
Debug SelectedFontName()
MyLoadFont(0,SelectedFontName(),SelectedFontSize(),SelectedFontStyle())
EndIf
*BitmapFont\AsciiStart=32
*BitmapFont\AsciiEnd=122
ReDim *BitmapFont\FontData(*BitmapFont\AsciiEnd-*BitmapFont\AsciiStart)
Debug "ArraySize="+Str(ArraySize(*BitmapFont\FontData()))
EndProcedure
Procedure RefreshImage(*BitmapFont.BitmapFont,WithBorder.b=#True)
Marg=GetGadgetState(#Gdt_Marg)
If IsImage(*BitmapFont\SpriteId):FreeImage(*BitmapFont\SpriteId):EndIf
If IsFont(0)
Protected.l MaxWidth=0,MaxHeight=0
*BitmapFont\SpriteId=CreateImage(#PB_Any,96*10,96*10,32,#PB_Image_Transparent)
StartDrawing(ImageOutput(*BitmapFont\SpriteId))
DrawingFont(FontID(0))
Debug "___"
Debug *BitmapFont\AsciiStart
Debug *BitmapFont\AsciiEnd
Debug "___"
For a=*BitmapFont\AsciiStart To *BitmapFont\AsciiEnd
c=a-*BitmapFont\AsciiStart
*BitmapFont\FontData(c)\Width=TextWidth(Chr(a))
Debug Str(a)+" width="+Str(TextWidth(Chr(a)))
*BitmapFont\FontData(c)\Height=TextHeight(Chr(a))
If *BitmapFont\FontData(c)\Width>MaxWidth:MaxWidth=*BitmapFont\FontData(c)\Width:EndIf
If *BitmapFont\FontData(c)\Height>MaxHeight:MaxHeight=*BitmapFont\FontData(c)\Height:EndIf
Next
Debug MaxWidth
Debug MaxHeight
Else
Debug "ERRROR"
EndIf
StopDrawing()
If MaxWidth>MaxHeight
Max=MaxWidth
Else
Max=MaxHeight
EndIf
StartDrawing(ImageOutput(*BitmapFont\SpriteId))
DrawingFont(FontID(font))
x.l=0:y.l=0
ReDim FinalFont(*BitmapFont\AsciiEnd-*BitmapFont\AsciiStart)
;Dim finalFont.myFontData(90)
For a=*BitmapFont\AsciiStart To *BitmapFont\AsciiEnd
c=a-*BitmapFont\AsciiStart
If x+*BitmapFont\FontData(c)\Width+Marg*2>ImageWidth(*BitmapFont\SpriteId)
x=0:Y=Y+MaxHeight+Marg*2
EndIf
If WithBorder=#True
DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Outlined )
Box(x,y,*BitmapFont\FontData(c)\Width+Marg*2,Max+Marg*2,RGBA(0,255,0,128))
;Line(x+Marg+*BitmapFont\FontData(c)\Width,y,1,Max,RGBA(255,0,0,200))
EndIf
DrawingMode(#PB_2DDrawing_Transparent|#PB_2DDrawing_AlphaBlend)
DrawText(x+Marg,y+Marg,Chr(a),RGBA(255,255,255,255))
finalFont(c)\x=x
finalFont(c)\y=y
finalFont(c)\Width=*BitmapFont\FontData(c)\Width+Marg*2
finalFont(c)\Height=MaxHeight+Marg*2
x=x+*BitmapFont\FontData(c)\Width+Marg*2
Next
Y=Y+MaxHeight+Marg*2
Line(0,Y,ImageWidth(*BitmapFont\SpriteId),1,RGBA(255,0,0,255))
StopDrawing()
StartDrawing(CanvasOutput(#Gdt_Canvas))
DrawImage(ImageID(*BitmapFont\SpriteId),0,0,768,768)
StopDrawing()
EndProcedure
If OpenWindow(#Win_Main, 0, 0, 1024, 768, "Thy Font Bitmap Creator", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(#Gdt_Canvas, 0, 0, 768, 768)
SpinGadget(#Gdt_Marg, 800, 10, 100, 25, 0,50,#PB_Spin_Numeric )
ButtonGadget(#Gdt_Save,800,740,75,25,"Save")
*f.BitmapFont=AddElement(BitmapFont())
SelectFont(*f)
RefreshImage(*f)
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #Gdt_Marg
RefreshImage(*f)
Case #Gdt_Save
RefreshImage(*f,#False)
SaveImage(BitmapFont()\SpriteId,"FontsCompress.png",#PB_ImagePlugin_
)
If CreateFile(0,"FontsCompress.dat")
WriteCharacter(0,BitmapFont()\AsciiStart,#PB_Ascii)
WriteCharacter(0,BitmapFont()\AsciiEnd,#PB_Ascii)
WriteData(0,@finalFont(),SizeOf(myFontData)*ArraySize(finalFont()))
CloseFile(0)
EndIf
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
CloseWindow(0)
EndIf
; IDE Options = PureBasic 6.00 Beta 5 (Windows - x64)
; CursorPosition = 146
; FirstLine = 88
; Folding = -
; EnableXP