Initial commit
This commit is contained in:
166
ThyBitmapFontCreator.pb
Normal file
166
ThyBitmapFontCreator.pb
Normal 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
|
Reference in New Issue
Block a user