166 lines
4.7 KiB
Plaintext
166 lines
4.7 KiB
Plaintext
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 |